Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaMáté Jónás Megváltozta több, mint 5 éve
1
Szövegfeldolgozás 2. Copyright, 1999 © Szlávi Péter Szlávi 2019.01.17.
2
Tartalomjegyzék 3. Szövegtípus speciális feladatai 3.1. Szűrés
Szlávi Tartalomjegyzék 3. Szövegtípus speciális feladatai 3.1. Szűrés Szóközelhagyás Szóközcsoport helyett egyetlen szóköz 3.2. Tömörítés TAB karakterek alkalmazása TOKEN-ek alkalmazása Huffman-kódolás Jelkombinációk kódolása Programozásmódszertan Szövegfeldolgozás 2.
3
3. Szövegtípus speciális feladatai 3.1. Szűrés
Szlávi 3. Szövegtípus speciális feladatai 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 Szövegfeldolgozás 2.
4
3.1. Szűrés 3.1.1. Szóközelhagyás
Szlávi 3.1. Szűrés 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 Szövegfeldolgozás 2.
5
3.1.1. Szóközelhagyás (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
6
3.1. Szűrés 3.1.2. Szóközcsoport helyett egyetlen szóköz
Szlávi 3.1. Szűrés 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 Szövegfeldolgozás 2.
7
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
8
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
9
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
10
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
11
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
12
3.1.2. Szóközcsoport helyett egyetlen szóköz (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
13
3. Szövegtípus speciális feladatai 3.2. Tömörítés
Szlávi 3. Szövegtípus speciális feladatai 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 Szövegfeldolgozás 2.
14
3.2. Tömörítés 3.2.1. TAB-karakterek alkalmazása
Szlávi 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 Szövegfeldolgozás 2.
15
3.2.1. TAB karakterek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
16
3.2.1. TAB karakterek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
17
3.2.1. TAB karakterek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
18
3.2.1. TAB karakterek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
19
3.2.1. TAB karakterek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
20
3.2. Tömörítés 3.2.2. TOKEN-ek alkalmazása
Szlávi 3.2. Tömörítés 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 Szövegfeldolgozás 2.
21
3.2.2. TOKEN-ek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
22
3.2.2. TOKEN-ek alkalmazása (folytatás)
Szlávi 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< 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: 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 Szövegfeldolgozás 2.
23
3.2.2. TOKEN-ek alkalmazása (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
24
3.2. Tömörítés 3.2.3. Huffman-kódolás
Szlávi 3.2. Tömörítés 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 Szövegfeldolgozás 2.
25
3.2.3. Huffman-kódolás (folytatás)
Szlávi 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, ,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 Szövegfeldolgozás 2.
26
3.2.3. Huffman-kódolás (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
27
3.2.3. Huffman-kódolás (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
28
3.2.3. Huffman-kódolás (folytatás)
Szlávi 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, ,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 Szövegfeldolgozás 2.
29
3.2. Tömörítés 3.2.4. Jelkombinációk kódolása
Szlávi 3.2. Tömörítés 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 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 Szövegfeldolgozás 2.
30
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
31
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
32
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
33
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
34
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
35
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
36
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
37
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
38
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
39
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
40
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
41
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
42
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
43
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
44
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi Jelkombinációk TOKEN-esítése (folytatás) 1. példa (folyt.): Be: abababc Eredmény: (a)(b)(ab)(ab)c = 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
45
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi Jelkombinációk TOKEN-esítése (folytatás) Próba lzw 2. példa: Be: abababac Eredmény: (a)(b)(ab)(aba)(c) = 0. KódTábla inic. 1. Olvas(,prefix) Ciklus amíg nem Vége?() 2. Olvas(,jel) Ha prefix+jelKódTábla akkor prefix:+jel 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 Szövegfeldolgozás 2.
46
3.2.4. Jelkombinációk TOKEN-esítése (folytatás)
Szlávi 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 Szövegfeldolgozás 2.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.