Mivel a közönséges és az egyszerű időszerűsítés között
tulajdonképpen csak a javítás elvégzésében van különbség, mi a
továbbiakban az egyszerű időszerűsítéssel fogunk foglalkozni. Közönséges
időszerűsítés esetén az adatrész cseréjének helyére a javító függvény
( )
elvégzése írható.
A feladatot három irányból is megpróbáljuk megoldani: visszavezetjük halmazok uniójára, egyváltozós egyértékű illetve kétváltozós egyértékű elemenkénti feldolgozásra.
Tekintsük a file-okat halmaznak, és próbáljuk meg halmazokon megoldani a feladatot.
Milyen kulcsértékek fordulhatnak elő az új törzsfile-ban? Természetesen csak olyanok,
amelyek vagy -ban, vagy
-ben, esetleg mindkettőben szerepeltek.
Terjesszük ki a
halmazt az üres értékkel:
A
segítségével
az egyes transzformációk értelmezési tartománya és értékkészlete az alábbiak szerint
alakul:
Ha egy elem adatrésze az értéket veszi fel, akkor az azt jelzi, hogy valójában nem létezik, és ezért nem kerül
bele az új törzsfile-ba. Idézzük fel az unió programját:
A feladat a következő megfeleltetéssel visszavezethető a fenti programra:
A megfelelő program:
Vizsgáljuk meg most, hogy mit kell tenni az elágazás egyes ágaiban:
Ha a kulcs csak a
eredeti törzsfile-ban szerepelt, akkor a
elemre nem vonatkozott módosítás, változtatás nélkül kell kiírni az
új törzsfile-ba.
Ha a kulcsérték mind az eredeti törzsfile-ban, mind pedig a módosítófile-ban
szerepelt, akkor a törlés és a javítás műveletek végezhetők el. Ebben
az ágban a
kulcsú elemet mindkét file-ból el kell hagyni.
Ha a kulcs csak a módosítófile-ban szerepelt, akkor csak a beszúrás műveletet
lehet elvégezni, és a
kulcsú elemet ki kell törölni a módosítófile-ból.
Ha a programnak hibajelzést is kell adnia, akkor azt a fenti struktogramokban
-val
jelzett helyeken kell megtennie. Térjünk most vissza az eredeti feladatra, ahol
halmazok helyett szekvenciális file-ok szerepelnek. Legyen az inputfile-okon a
művelet értelmezve. Ekkor a program az alábbiak szerint alakul:
Az állapottértranszformációt alkalmazva így eljutottunk az
elemenként feldolgozható függvényre felírt egyváltozós elemenkénti feldolgozáshoz, ahol a transzformációs rész alkalmazása az adatrészre:
A specifikáció:
|
|
|
|
ahol
Térjünk vissza most az eredeti állapottérre:
________________________________________
_____________
_____________
_____________
_____________________________
____________________
_____________________________
____________________
_____________________________
____________________
_____________________________
____________________
Használjuk fel azt a tényt, hogy a értékadást kiszámító programokban és az
értékadás megfelelőjében szereplő elágazások feltételrendszere megegyezik, továbbá
a
értékadást csak azokba az ágakba írjuk bele, amelyekben
.
Ekkor ugyanazt a programot kapjuk, mint az első megoldásban.
A feladat megoldásának talán legegyszerűbb módja az, ha kétváltozós egyértékű – hibakezelés esetén kétértékű – elemenkénti feldolgozásra vezetjük vissza. Tekintsük a feladat eredeti specifikációját.
Ha a módosítófile kulcs szerint egyértelmű, akkor az időszerűsítés függvénye
( ) a
kulcsokra nézve elemenként feldolgozható. A kulcsértékekre felírt függvény:
Ha ezt a fenti függvényt behelyettesítjük a kétváltozós elemenkénti feldolgozás tételébe, akkor ugyanahhoz a megoldóprogramhoz jutunk – csak sokkal rövidebb úton –, mint az első megoldásban.