Szövegfeldolgozás 2. Copyright, 1999 © Szlávi Péter Szlávi 2019.01.17.
Tartalomjegyzék 3. Szövegtípus speciális feladatai 3.1. Szűrés Szlávi 2019.01.17. Tartalomjegyzék 3. Szövegtípus speciális feladatai 3.1. Szűrés 3.1.1. Szóközelhagyás 3.1.2. Szóközcsoport helyett egyetlen szóköz 3.2. Tömörítés 3.2.1. TAB karakterek alkalmazása 3.2.2. TOKEN-ek alkalmazása 3.2.3. Huffman-kódolás 3.2.4. Jelkombinációk kódolása Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3. Szövegtípus speciális feladatai 3.1. Szűrés Szlávi 2019.01.17. 3. Szövegtípus speciális feladatai 3.1. Szűrés Megállapodások, közös deklarációk: Változó X:InpSzövegFile [X nem üres] Z:OutSzövegFile [segédpufferként:] k:Karakter vagy csoport:Szöveg Megnyit(?,fNév) helyett egyszerűen Nyit(?) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1. Szűrés 3.1.1. Szóközelhagyás Szlávi 2019.01.17. 3.1. Szűrés 3.1.1. Szóközelhagyás 1. feladat: szóközök elhagyása. Megoldás: típusfinomítással Típus Bemenet=File(Karakter) Kimenet=File(Karakter) Karakter=szóköz Karakter= egyéb karakter egyéb karakter ad : A típusfinomítás során föltárt tagolási konfliktus föloldása virtuális típus bevezetésével. Jelen esetben kimeneti oldalon egy „virtuális karakter” típussal, amelynek újra kell gondolni a megnyitás, írás és a lezárás műveleteit. Lásd: az adatfeldolgozás előadást! ad File: háttértárolón tárolt sorozat. (Hogy input-e vagy output, azt a kulcs-szó nem rögzíti… ad : unió (típuskonstrukció); egy lehetséges megvalósítása az ‘alternatív rekord’. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.1. Szóközelhagyás (folytatás) Szlávi 2019.01.17. 3.1.1. Szóközelhagyás (folytatás) Probléma: „szóköz ” egymáshozrendelése Megoldása: „struktúraszerinti feldolgozás” elve Elágazás Eljárás Szűrés: Nyit(X,Z) [mindkettő megnyitása] Ciklus amíg nem Vége?(X) Olvas(X,c) Ha c' ' akkor Ír(Z,c) [„virtuális típus” Írás művelete] Ciklus vége Zár(X,Z) Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1. Szűrés 3.1.2. Szóközcsoport helyett egyetlen szóköz Szlávi 2019.01.17. 3.1. Szűrés 3.1.2. Szóközcsoport helyett egyetlen szóköz 2. feladat: „többlet” szóközök elhagyása. 1. megoldás: típusfinomítással Típus Bemenet=File(BeElem) Kimenet=File(KiElem) BeElem=szóközcsoport KiElem=szóköz egyéb karakter egyéb karakter Probléma: a szóközcsoport végének felismerése Megoldása: előreolvasás „különleges” fájlvég-kezelés Változó k:Karakter [az előreolvasott karakter] fájlvég:Logikai [a Vége? fv. állítja] ad : Virtuális típus bevezetése az inputoldalon. ad File(??Elem): természetesen ??=Be esetén InpSzövegFile, ??=Ki esetén OutSzövegFile Most a típusfinomítás szempontjából csak az a lényeges, hogy (valamilyen) File, azaz elemsorozat… Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Szlávi 2019.01.17. 3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Eljárás Szűrés: Nyitás(X); Nyit(Z) Ciklus amíg nem fájlvég ElemOlvasás(X,c); Ír(Z,c) Ciklus vége Zárás(X); Zár(Z) Eljárás vége. Eljárás Nyitás(Változó X:InpSzövegFile): [Ef: X nem üres] Nyit(X); Olvas(X,k); fájlvég:=Vége?(X) Eljárás Zárás(Változó X:InpSzövegFile): Zár(X) Ha kKarakter(0) akkor Ír(Z,k) Pirossal szedettek a virtuális típus műveletei. A zölddel szedett jelzi, hogy „testidegen” módon (paraméterezés nélkül (orvvul) került egy X-beli műveletbe a Z-re vonatkozó. Oka: elkerüljük a mindkét oldali virtuális típus bevezetést. Kék az előreolvasás miatti részek. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Szlávi 2019.01.17. 3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Eljárás ElemOlvasás(Változó X:InpSzövegFile, c:Karakter): c:=k [az előreolvasott jel] Ha Vége?(X) akkor fájlvég:=Igaz; k:=Karkter(0) különben [előreolvasás:] Ha c=' ' akkor Ciklus amíg nem Vége?(X) és k=' ' Olvas(X,k) Ciklus vége fájlvég:=Vége?(X) Ha k=' ' akkor k:=Karkter(0) különben Olvas(X,k) Elágazás vége Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Szlávi 2019.01.17. 3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) 2. megoldás: típusfinomítással Típus Bemenet=File(BeCsoport) Kimenet=File(KiCsoport) BeCsoport=szóközcsoportKiCsoport=szóköz egyéb csoport egyéb csoport Problémák és megoldásuk: • a jelcsoportok végeinek felismerése előreolvasás „különleges” fájlvég-kezelés; • melyik jelcsoportnál tartunk feljegyezzük egy segédváltozóba: szóköz=Igaz, ha szóközcsoport következik ad : Virtuális típus bevezetése az input- és az outputoldalon. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Szlávi 2019.01.17. 3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Változó k:Karakter [az előreolvasott karakter] szóköz,fájlvég:Logikai Eljárás Szűrés: Nyitás(X); Nyit(Z) Ciklus amíg nem fájlvég Csoportolvasás(X,csoport); Csoportírás(Z,csoport) Ciklus vége Zárás(X); Zár(Z) Eljárás vége. Eljárás Nyitás(Változó X:InpSzövegFile): [Ef: X nem üres] Nyit(X); Olvas(X,k) szóköz:=(k=' '); fájlvég:=Vége?(X) Eljárás vége. Az első csoport. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Szlávi 2019.01.17. 3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Eljárás Csoportolvasás(Változó X:InpSzövegFile, csoport:Szöveg): csoport:=k [az előreolvasottal kezdődik a csoport] Ha nem Vége?(X) akkor Olvas(X,k) Ciklus amíg nem Vége?(X) és szóköz=(k=' ') csoport:+k; Olvas(X,k) Ciklus vége Ha szóköz=(k=' ') akkor fájlvég:=Igaz csoport:+k k:=Karakter(0) különben szóköz:=nem szóköz különben fájlvég:=Igaz; k:=Karakter(0) Elágazás vége Eljárás vége. Még a csoporthoz tartozik-e? Csoport-váltás Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Szlávi 2019.01.17. 3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás) Eljárás Csoportírás(Változó Z:OutSzövegFile, Konstans csoport:Szöveg): Ha Jele(csoport,1)=' ' akkor Ír(Z,' ') különben Ír(Z,csoport) Eljárás vége. Eljárás Zárás(Változó X:InpSzövegFile): Zár(X) Ha kKarakter(0) akkor Ír(Z,k) Megjegyzem: az X-beli Zárásból már kiebrudalható lett volna a Z-re vonatkozó, s így kakukktojásként szereplő művelet, hiszen a Z-oldalon is bevezettünk virtuális típust. Azaz szebb lett volna az elágazást a Z-zárás műveletébe tenni. (Az előzővel való hasonlóság növelése miatt maradt így.) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3. Szövegtípus speciális feladatai 3.2. Tömörítés Szlávi 2019.01.17. 3. Szövegtípus speciális feladatai 3.2. Tömörítés Általános feladat: szöveg- (byte-sorozat) transzformáció a kisebb helyfoglalás érdekében; visszaállíthatóság. Módszerek: Tab-osítás Token-esítés Huffman-osítás LZW-esítés Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2. Tömörítés 3.2.1. TAB-karakterek alkalmazása Szlávi 2019.01.17. Mi a TAB? Rögzített számú szóközt helyettesítő jel (statikus); A sor rögzített pontjáig (TP) pozíciónáló jel (dinamikus). Feladat: a szóközcsoportok helyettesítése TAB-okkal (ill. vissza); feltételezés: sorokból áll a fájl. Megoldás: (a dinamikus értelmezéshez) Típus Bemenet=File(BeCsoport) Kimenet=File(KiCsoport) BeCsoport=nem szóköz KiCsoport=nem szóköz szóközök TP-ig TAB szóközök betűig szóközök betűig A nem szóközök között a SorVégJel is! Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.1. TAB karakterek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.1. TAB karakterek alkalmazása (folytatás) Típus TFajta = (NemSzóköz,Tabjel,Szóközök) Változó k,kar: Karakter [k: az előreolvasott karakter] fájlvég: Logikai oszlop: Egész [az előreolvasott karakter helye a sorban] db: Egész fajta: TFajta Függvény TABpozíció?(Konstans o:Egész): Logikai Eljárás Tömörítés: Nyitás(X); Nyit(Z) Ciklus amíg nem fájlvég Csoportolvasás(X,fajta,kar,db) Csoportírás(Z,fajta,kar,db) Ciklus vége Zárás(X); Zár(Z) Eljárás vége. ad Függvény TABpozíció?…: megadja bármely oszlopszámhoz, hogy tabulátorpozíció-e. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.1. TAB karakterek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.1. TAB karakterek alkalmazása (folytatás) Eljárás Nyitás(Változó X:InpSzövegFile): [Ef: X nem üres] Nyit(X); Olvas(X,k); oszlop:=1 fájlvég:=Vége?(X) Eljárás vége. Eljárás Zárás(Változó X:InpSzövegFile): Zár(X) Ha kKarakter(0) [volt előreolvasás] akkor Ír(Z,k) Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.1. TAB karakterek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.1. TAB karakterek alkalmazása (folytatás) Eljárás Csoportolvasás(Változó X:InpSzövegFile, fajta:TFajta, kar:Karakter, db:Egész): kar:=k Elágazás Vége?(X) esetén fájlvég:=Igaz; k:=Karakter(0) [nincs előreolvasás] k' ' esetén Betűolvasás(X,kar) [sorvég-kezelés!] fajta:=NemSzóköz; [db:=1] egyéb esetben Szóközcsoportolvasás(X,fajta,kar,db) Elágazás vége Eljárás vége. ad [db:=1]: azért tettem megjegyzéssé, mert valójában csak egy jel lehet, és a kiírásnál fel sem használjuk a db-t ez esetben (l. Csoportírás). Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.1. TAB karakterek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.1. TAB karakterek alkalmazása (folytatás) Eljárás Betűolvasás(Változó X:InpSzövegFile, Konstans kar:Karakter): Olvas(X,k) Ha kar=SorVégjel akkor oszlop:=1 különben oszlop:+1 Eljárás vége. Eljárás Szóközcsoportolvasás(Változó X:InpSzövegFile, fajta:TFajta, Konstans kar:Karakter, Változó db:Egész): [Ef: k=kar=' '] db:=0 Ciklus amíg [legfeljebb SorVégjel-ig!] k=' ' és nem TABpozíció?(oszlop) db:+1; Olvas(X,k); oszlop:+1 Ciklus vége Ha k=' ' akkor fajta:=Tabjel különben fajta:=Szóközök Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.1. TAB karakterek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.1. TAB karakterek alkalmazása (folytatás) Eljárás Csoportírás(Változó Z:OutSzövegFile, Konstans fajta:TFajta, kar:Karakter, db:Egész): Elágazás fajta=NemSzóköz esetén Ír(Z,kar) fajta=Tabjel esetén Ír(Z,TAB) fajta=Szóközök esetén Ciklus i=1-től db-ig Ír(Z,' ') Ciklus vége Elágazás vége Eljárás vége. A „vissza” megoldás: hf. A TAB„statikus” értelmezésű megoldása: hf. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2. Tömörítés 3.2.2. TOKEN-ek alkalmazása Szlávi 2019.01.17. 3.2. Tömörítés 3.2.2. TOKEN-ek alkalmazása A lényeg: ismétlődő jelsorozatok helyett egy spec.jel (®) + multiplicitás (đ) + az ismétlődő jel egy példánya. Ef: ® „normál” Szöveg és multiplicitás < 256 Típus Bemenet=File(Csoport) Kimenet=File(Csoport) Csoport=Szöveg Csoport=Szöveg [Típusinvariáns: s:Szöveg Kódolt jel azonos karakterek sorozata és Hossz(s)<256 és ®s] Kódolt jel=®+đ+Karakter A 256-os korlát könnyedén növelhető 3-mal! Hogyan? Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.2. TOKEN-ek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.2. TOKEN-ek alkalmazása (folytatás) Változó k,kar: Karakter [k: előreolvasott jel] db: Egész fájlvég: Logikai Eljárás Tömörítés: Nyitás(X); Nyit(Z) Ciklus amíg nem fájlvég Csoportolvasás(X,db,kar) Csoportírás(Z,db,kar) Ciklus vége Zár(X); Zárás(Z) Eljárás vége. Eljárás Nyitás(Változó X:InpSzövegFile): [Ef: X nem üres] Nyit(X); Olvas(X,k); fájlvég:=Vége?(X) Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.2. TOKEN-ek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.2. TOKEN-ek alkalmazása (folytatás) Eljárás Csoportolvasás(Változó X:InpSzövegFile, db:Egész, kar:Karakter): kar:=k; db:=1 Ha Vége?(X) akkor fájlvég:=Igaz; k:=Karakter(0) különben Olvas(X,k) Ciklus amíg nem Vége?(X) és k=kar és db<255 db:+1; Olvas(X,k) Ciklus vége Elágazás Vége?(X) és k=kar és db<255 esetén fájlvég:=Igaz; k:=Karakter(0); db:+1 Vége?(X) [és (db=255 vagy kkar)] esetén fájlvég:=Igaz Elágazás vége Elágazás vége Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.2. TOKEN-ek alkalmazása (folytatás) Szlávi 2019.01.17. 3.2.2. TOKEN-ek alkalmazása (folytatás) Eljárás Csoportírás(Változó Z:OutSzövegFile, Konstans db:Egész, kar:Karakter): Ha db<4 akkor Ciklus i=1-től db-ig Ír(Z,kar) Ciklus vége különben Ír(Z,®+Karakter(db)+kar) Eljárás vége. Eljárás Zárás(Változó Z:OutSzövegFile): Ha kKarakter(0) akkor Ír(Z,k) Zár(Z) Eljárás vége. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2. Tömörítés 3.2.3. Huffman-kódolás Szlávi 2019.01.17. 3.2. Tömörítés 3.2.3. Huffman-kódolás A lényeg: A jelgyakoriságot figyelembevevő, változó bit- hosszúságúra áttérés. Pl.: Legyen egy szövegben összesen 100 jel: ’a’.. ’h’ jelekből, a következő gyakoriságokkal: Gyak(’a’..’h’)=(40,20,10,8,8,5,5,4). Helyfoglalás: 800 bit. 1. Naiv tömörítés: A 8 jel ábrázolható 3 biten. Helyfoglalás: 100×3=300 bit (+ a kódolótábla). Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.3. Huffman-kódolás (folytatás) Szlávi 2019.01.17. 3.2.3. Huffman-kódolás (folytatás) 2. Tömörítés: változó hosszúságban. Pl. próbál- gatással: Kód(’a’..’h’)=(12,0012,0112,00012,01012,01002, 000012,000002). Helyfoglalás: 259 bit (+ a kódolótábla) (259=40×1+20×3+10×3+8×4+8×4+5×4+5×5+4×5) Kérdések: elfogadható-e, azaz egyértelmű-e, a legjobb-e. Válasz: egyértelműen visszaállítható (prefixmentes), ??? Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.3. Huffman-kódolás (folytatás) Szlávi 2019.01.17. 3.2.3. Huffman-kódolás (folytatás) A Huffman-kódolás működése egy példán Kezdő helyzet: 1. lépés után: 2. lépés után: 3. lépés után: Ha a legkisebb gyakoriságúakat vonjuk össze, akkor a legkisebb gyakoriságúakat bővítjük 1 bittel… Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.3. Huffman-kódolás (folytatás) Szlávi 2019.01.17. 3.2.3. Huffman-kódolás (folytatás) 4. lépés után: 5. lépés után: 6. lépés után: 7. lépés után: Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.3. Huffman-kódolás (folytatás) Szlávi 2019.01.17. 3.2.3. Huffman-kódolás (folytatás) S végül a kódfa: A kód leolvasása: Kód(’a’..’h’)=(02,1002,1112,10112,11002,11012, 101002,101012). Helyfoglalás: 259 bit (+ a kódolótábla) (259=40×1+20×3+10×3+8×4+8×4+5×4+5×5+4×5) Figyelem: a fájlt kódoláskor 2-szer kell végig olvasni! A kódolótábla mekkora? * Minden jelhez (256): hossz+kód (2 byte) = 512 byte * Csak az előforduló jelekhez (8+1; 1: a jelek száma): „eredeti” kód+hossz+kód ( 3 byte) = 8*3+1 = 25 byte Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2. Tömörítés 3.2.4. Jelkombinációk kódolása Szlávi 2019.01.17. 3.2. Tömörítés 3.2.4. Jelkombinációk kódolása A lényege: Jelpermutációk kód. A kód egy rögzített méretű táblázatbeli sorszám ( „fix bit-hosszúság”). Pl. ha a táblázat 4096 elemű, akkor 12 bitesek... Egy-betűs „permutációk” kódjai előre fixáltak, a táblázat 1..255 elemei tartoznak hozzájuk. A kódtáblázat dinamikusan épül az adott tömörítendő fájl jelei alapján. A tábla elemei: „prefix”-muta- tó + „utolsó” jel Konstans Méret:PozEgész(4096) Típus KódTábla=Tömb(1..Méret:Kódoló) Kódoló= Rekord(eleje:0..Méret, bővítés:Karakter) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) A dekódolás a kódolással azonos logikát követ (ui. dekó-dolás közben is épül a KódTábla). nincs szükség a kódolt fájlban többlet információt tá-rolni egy menet is elég akár oda-, akár visszafelé. A „nagyvonalú” algoritmus: 0. KódTábla inicializálás [az 1-betűs kódokhoz] 1. Olvas(be,prefix) Ciklus amíg nem Vége?(be) 2. Olvas(be,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. különben Ír(ki,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(ki,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa: Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc Eredmény: (a)(b)(ab)(ab)c = 97 98 256 256 99 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Próba lzw 2. példa: Be: abababac Eredmény: (a)(b)(ab)(aba)(c) = 97 98 256 258 99 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) 3. Ha prefix+jelKódTábla akkor prefix:+jel 4. kül. Ír(,KódSorszám(prefix)) KódTáblaprefix+jel prefix:=jel Ciklus vége 5. Ír(,KódSorszám(prefix)) Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.
3.2.4. Jelkombinációk TOKEN-esítése (folytatás) Szlávi 2019.01.17. 3.2.4. Jelkombinációk TOKEN-esítése (folytatás) 3. példa (2. folytatása): dekódolás ... Probléma: Hiányzik a kód! Magyarázat: a kódoláskor „túl közel” került ez a táblába és kódként a tömörített fájlba. Megoldás erre az esetre: Csak egy már ismert rövidebb szeletét lehet kódként föl-használni. Programozásmódszertan 2019.01.17. Szövegfeldolgozás 2.