15.2Időszerűsítés egyértelmű módosítófile-lal

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.

15.2.1Visszavezetés halmazok uniójára

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:

  1. 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.

  2. 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.

  3. 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.

15.2.2Visszavezetés kétváltozós elemenkénti feldolgozásra

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.