Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaCsaba Fazekas Megváltozta több, mint 9 éve
1
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
2
Feladat Adjuk meg a kifejezés lengyelformáját úgy, hogy az operandusok felett szerepeljen a verem tartalma az operandusok kiírásakor. Adjuk meg a kifejezés lengyelformáját úgy, hogy az operandusok felett szerepeljen a verem tartalma az operandusok kiírásakor. Legyen a kifejezés: x:=(a*b+1)/((x^z^2+u*(v-3))*(f+g-4)) Legyen a kifejezés: x:=(a*b+1)/((x^z^2+u*(v-3))*(f+g-4))
3
A lengyelforma algoritmusa INIT (V) READ(C) C!=EOF Operand(C)C=“(“C=“)”Művelet(C) WRITE(C)Push(V,C) Pop(V,A) A!=“(“ WRITE(A) Pop(V,A) !IsEmpty(V) && Top(V)!=“(” && pr(Top(V)>=pr(C) Pop(V,A) WRITE(A) Push(V,C) READ(C) !IsEmpty(V) Pop(V,A) WRITE(A)
4
Most pedig vizsgáljuk meg a kifejezést az algoritmus alapján! 1.: INIT(V) – Inicializálunk egy (üres) VERMET (N-elemű). ? Top (művelet) ? Top (művelet) V[N] V[N] V[3] V[3] V[2] V[2] V[1] V[1]......
5
A Verem használandó műveletei Top : Legfelső (utoljára betett) elem lekérdezése Top : Legfelső (utoljára betett) elem lekérdezése Push : Egy elem berakása a verembe Push : Egy elem berakása a verembe Pop : A legfelső elem kivétele a veremből Pop : A legfelső elem kivétele a veremből IsEmpty : Üres-e a verem (logikai) IsEmpty : Üres-e a verem (logikai) Példa : Egy V-verem : Példa : Egy V-verem : Pop(V,C) : Pop(V,C) : Top(V)=ALMA ALMA Top(V)=ALMA ALMA IsEmpty(V)=FALSE IsEmpty(V)=FALSE IsEmpty(V) = IsEmpty(V) = TRUE TRUE Push(V,”ALMA”) Push(V,”ALMA”) ALMA
6
A példa kifejezés feldolgozása 2.: READ(C) - x:=(a*b+1)/((x^z^2+u*(v-3))*(f+g-4)) kifejezés (rekord) olvasása elemenként a ‘C’ segítségével. kifejezés (rekord) olvasása elemenként a ‘C’ segítségével. Tehát READ(C) : azaz az “x” elem feldolgozás alá került Tehát READ(C) : azaz az “x” elem feldolgozás alá került az algoritmusunk következő lépései számára. az algoritmusunk következő lépései számára. Tulajdonképpen elképzelhetünk egy lefoglalt memóriaterületet (tömböt) : Tulajdonképpen elképzelhetünk egy lefoglalt memóriaterületet (tömböt) :... X
7
És elezdődik a ciklus 3.: C!=EOF – Amíg a rekordnak nincs vége, addig a READ művelet végrehajtható. addig a READ művelet végrehajtható. Ha az EOF-hoz ér, azaz ha már nincs több elem, Ha az EOF-hoz ér, azaz ha már nincs több elem, akkor már nem lépünk be a ciklusba. akkor már nem lépünk be a ciklusba. (Vigyázat : ez nem az algoritmus által használt (Vigyázat : ez nem az algoritmus által használt verem, és nem is az output.) verem, és nem is az output.) x:=(a*b+1)/((x^z^2+u*(v-3))*(f+g-4)) EOF
8
A Ciklusbeli Elágazások Amíg a kifejezés végére nem érünk a ciklusban 4 fő lehetőség lehetséges. Amíg a kifejezés végére nem érünk a ciklusban 4 fő lehetőség lehetséges. Vizsgáljuk meg őket, de most már a példa kifejezés Vizsgáljuk meg őket, de most már a példa kifejezés segítségével. Tehát az segítségével. Tehát az x:=(a*b+1)/((x^z^2+u*(v-3))*(f+g-4)) kifejezés x:=(a*b+1)/((x^z^2+u*(v-3))*(f+g-4)) kifejezés első eleme az “X”. Ő operandus, azaz rá a WRITE(C) utasítás érvényes: első eleme az “X”. Ő operandus, azaz rá a WRITE(C) utasítás érvényes: Output: Verem : IsEmpty = TRUE X
9
A második elem Mivel “X” nem az egyetlen elem, ezért a READ művelet folytatódik : a 2. elem az “:=” művelet. Mivel “X” nem az egyetlen elem, ezért a READ művelet folytatódik : a 2. elem az “:=” művelet. Ezért ő a ciklusbeli elágazás utolsó (4.) ágába kerül. Ezért ő a ciklusbeli elágazás utolsó (4.) ágába kerül. Mivel a vermünk még üres, ezért őt csak berakjuk a verembe. Mivel a vermünk még üres, ezért őt csak berakjuk a verembe. X :=
10
A kifejezés feldolgozása folyt. A “(” jellel folytatódik a kifejezés. Értelemszerűen rá Az elágazások második ága érvényes. Őt is berakjuk a verembe. X := (
11
A kifejezés feldolgozása folyt. Következő : “a” - operandus : kiírjuk az outputra! xa := (
12
A kifejezés feldolgozása folyt. Következő : “*” - művelet : berakjuk a verembe! x a := ( *
13
A kifejezés feldolgozása folyt. Következő : “b” - operandus : kiírjuk az outputra! x a b := ( *
14
A kifejezés feldolgozása folyt. Következő : “+” - művelet, és a prioritása kisebb, mint a verem tetején lévő “*”-nak, ezért beléphetünk Következő : “+” - művelet, és a prioritása kisebb, mint a verem tetején lévő “*”-nak, ezért beléphetünk a 4. ág ciklusába: *-ot kivesszük, kírjuk és betesszük a 4. ág ciklusába: *-ot kivesszük, kírjuk és betesszük a verembe a + műveletet. a verembe a + műveletet. x a b * := ( +
15
A kifejezés feldolgozása folyt. Következő : “1” - operandus : kiírjuk az outputra! x a b * 1 := ( +
16
A kifejezés feldolgozása folyt. Következő : “)” - Kivesszük a verem legfelső elemét és kiírjuk az outputra amíg el nem jutunk a “(”-ig, és kiírjuk. a “(”-ig, és kiírjuk. x a b * 1 + :=
17
A kifejezés feldolgozása folyt. Következő : “/” - művelet : betesszük a verembe! x a b * 1 + := /
18
A kifejezés feldolgozása folyt. Következik 2 db “(” - betesszük őket a verembe! Következik 2 db “(” - betesszük őket a verembe! x a b * 1 + := / ( (
19
A kifejezés feldolgozása folyt. Következő : “x” - operandus : kiírjuk az outputra! x a b * 1 + x := / ( (
20
A kifejezés feldolgozása folyt. Következő : “^” - művelet : betesszük a verembe! x a b * 1 + x := / ( ( ^
21
A kifejezés feldolgozása folyt. Következő : “z” - operandus : kiírjuk az outputra! x a b * 1 + x z := / ( ( ^
22
A kifejezés feldolgozása folyt. Következő : “^” - művelet : kivesszük a verem elemeit és kírjuk őket a ciklusfeltételnek megfelelően, majd az aktuális műveletet berakjuk a verembe! Következő : “^” - művelet : kivesszük a verem elemeit és kírjuk őket a ciklusfeltételnek megfelelően, majd az aktuális műveletet berakjuk a verembe! x a b * 1 + x z ^ := / ( ( ^
23
A kifejezés feldolgozása folyt. Következő : “2” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 := / ( ( ^
24
A kifejezés feldolgozása folyt. Következő : “+” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 := / ( ( ^ +
25
A kifejezés feldolgozása folyt. Következő : “u” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u := / ( ( ^ +
26
A kifejezés feldolgozása folyt. Következő : “*” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u := / ( ( ^ + *
27
A kifejezés feldolgozása folyt. Következő : “(” - beteszük a verembe! x a b * 1 + x z ^ 2 u := / ( ( ^ + * (
28
A kifejezés feldolgozása folyt. Következő : “v” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v := / ( ( ^ + * (
29
A kifejezés feldolgozása folyt. Következő : “-” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u v := / ( ( ^ + * ( -
30
A kifejezés feldolgozása folyt. Következő : “4” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v 3 - * + ^ f g + 4 := / ( * ( -
31
A kifejezés feldolgozása folyt. Következő : “3” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v 3 := / ( ( ^ + * ( -
32
A kifejezés feldolgozása folyt. Következő : “)” - Kivesszük a verem legfelső elemét és kiírjuk az outputra amíg el nem jutunk a “(”-ig, és kiírjuk. a “(”-ig, és kiírjuk. x a b * 1 + x z ^ 2 u v 3 - := / ( ( ^ + *
33
A kifejezés feldolgozása folyt. Következő is “)” - Kivesszük a verem legfelső elemét és kiírjuk az outputra amíg el nem jutunk a “(”-ig, és kiírjuk. a “(”-ig, és kiírjuk. x a b * 1 + x z ^ 2 u v 3 - * + ^ := / (
34
A kifejezés feldolgozása folyt. Következő : “*” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u v 3 - * + ^ := / ( *
35
A kifejezés feldolgozása folyt. Következő : “(” - beteszük a verembe! x a b * 1 + x z ^ 2 u v 3 - * + ^ := / ( * (
36
A kifejezés feldolgozása folyt. Következő : “f” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v 3 - * + ^ f := / ( * (
37
A kifejezés feldolgozása folyt. Következő : “+” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u v 3 - * + ^ f := / ( * ( +
38
A kifejezés feldolgozása folyt. Következő : “g” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v 3 - * + ^ f g := / ( * ( +
39
A kifejezés feldolgozása folyt. Következő : “-” - művelet, melynek prioritasa megegyezik a verem tetejen lévő “-” jellel. Igy a “+”-t kiírjuk, a “-” jelet berakjuk a verembe. Következő : “-” - művelet, melynek prioritasa megegyezik a verem tetejen lévő “-” jellel. Igy a “+”-t kiírjuk, a “-” jelet berakjuk a verembe. x a b * 1 + x z ^ 2 u v 3 - * + ^ f g + := / ( * ( -
40
A kifejezés feldolgozása folyt. Következő : “)” - Kivesszük a verem legfelső elemét és kiírjuk az outputra amíg el nem jutunk a “(”-ig, és kiírjuk. a “(”-ig, és kiírjuk. x a b * 1 + x z ^ 2 u v 3 - * + ^ f g + - := / ( *
41
A kifejezés feldolgozása folyt. Következő is “)” - Kivesszük a verem legfelső elemét és kiírjuk az outputra amíg el nem jutunk a “(”-ig, és kiírjuk. a “(”-ig, és kiírjuk. x a b * 1 + x z ^ 2 u v 3 - * + ^ f g + - * := /
42
A kifejezés végére értünk Ürítjük a vermet, és sorba kiírjuk az elemeket. IsEmpty(V)=TRUE : IsEmpty(V)=TRUE : A végleges OUTPUT: x a b * 1 + x z ^ 2 u v 3 - * + ^ f g + - * / :=
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.