Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.

Hasonló előadás


Az előadások a következő témára: "Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató."— Előadás másolata:

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 + - * / :=


Letölteni ppt "Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató."

Hasonló előadás


Google Hirdetések