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

Slides:



Advertisements
Hasonló előadás
Sor láncolt ábrázolással
Advertisements

Programozási feladatok
Megszámlálás Elemi algoritmusok.
Sorozatszámítás Sorozatszámítás (N,A,s) s := kezdőérték
 Megfigyelhető, hogy amikor több elem közötti összehasonlítás történik, akkor szükség van egyszerre több értékre is, főleg akkor, ha ezek az értékek jóval.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Adatszerkezetek Az adatokat két fő csoportra oszthatjuk: egyszerű és összetett adatok.  Az egyszerű adatot egy érték jellemez, tovább nem bontható. (szám,
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
4. Helyes zárójelezés algoritmusa
Minimális költségű feszítőfák
Készítette: Lakos Péter
Gráfok szélességi bejárása
Gráf Szélességi bejárás
JavaScript.
Dinamikus tömbök.
Bevezetés a Java programozásba
Algebra a matematika egy ága
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
A verem működése fpga-n
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Reprezentációs függvény. Adva egy adattípus absztrakt és konkrét specifikációja: d a = ( A, F, E a ); d c = ( C, G, E c ); A = {A 0,..., A n };C = {C 0,...,
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
16. Verem műveletei Kaszab Gábor.
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Edényrendezés - RADIX „vissza” - bináris számokra
Copyright, 1999 © Szlávi Péter Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
Helyes zárójelezés programozási tétele LL.
Szélességi bejárás A szélességi bejárással egy irányított vagy irányítás nélküli véges gráfot járhatunk be a kezdőcsúcstól való távolságuk növekvő sorrendjében.
A digitális számítás elmélete
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
Gráf szélességi bejárása
Készítette: Lakos Péter.  Adott egy irányított vagy irányítatlan, véges gráf.  Írjuk ki a csúcsokat egy kezdőcsúcstól való távolságuk növekvő sorrendjében.
Ismétlés.
Kifejezések a Pascalban Páll Boglárka. Ismétlés: Ahogy algoritmikából láttuk, a kifejezések a Pascal nyelvben is operátorokból és operandusokból állnak.
Az algoritmusok áttekinthető formában történő leírására szolgáló eszközök Páll Boglárka.
Lénárt Szabolcs Páll Boglárka
Listák, Vermek és Várakozási Sorok. Vermek Def: Egy sajátos lista amelyben minden beszúrási illetve törlési művelet csak a lista egyik végén történik.
Átalakítás előltesztelő ciklusból hátultesztelő ciklusba és fordítva.
Listák, Vermek és Várakozási Sorok
ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására szolgál
Tömbök és programozási tételek
Összetett adattípusok
Algoritmus szerkezetek
Gráf szélességi bejárása SzB(G,p). Tetszőleges gráf, melyben a p csúcsot választottam kiindulónak: A gráfnak megfelelő fa:
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Feladat: Adott egy város, benne metrók és állomások. Írjunk algoritmust amely megszámolja hogy mennyi az a legkevesebb átszállás amellyel egy tetszőleges.
Nevezetes algoritmusok
Java programozási nyelv Vezérlési szerkezetek
Algoritmusok.
A Helyes Zárójelezés Struktogramja
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Egyenesvonalú (lineáris) adatszerkezetek
Az ábrán az inicializáló blokk lefutása utáni állapotot láthatjuk. A KÉSZ halmazhoz való tartozást színezéssel valósítjuk meg. A nem KÉSZ csúcsok fehérek,
Török Katalin és Marosi Nóra 11/c. Pascal: Az es években megjelent magas szintű programozási nyelv, közel áll az emberi gondolkodáshoz. Nevét.
Horváth Bettina VZSRA6.  Célja: Az eljárás célja egy véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő sorrendben.
Algebrai kifejezések Nem tudod? SEGÍTEK!.
Gráf szélességi bejárása. Cél Az algoritmus célja az, hogy bejárjuk egy véges gráf összes csúcsát és kiírjuk őket a kezdőcsúcstól való távolságuk szerint.
Összeállította: Gergely János
Prim algoritmus Algoritmusok és adatszerkezetek 2. Újvári Zsuzsanna.
Szélességi bejárás Pátyerkó Dorina (VTYX9O). Szélességi bejárás algoritmusa Kijelölünk egy kezdőcsúcsot. A csúcs szomszédjait megkeressük, majd betesszük.
A verem. A verem (stack) homogén adatelemek olyan sorozata, amelyen két művelet értelmezett: –Új elem elhelyezése a verem tetejére (push) –Elem kivétele.
A verem és a sor adatszerkezet
Dinamikus adatszerkezetek
Algoritmizálás.
Programozás C# -ban Elágazások.
VEREM.
Lineáris keresés Keresés (N,A,sorszam) i := 1
Aritmetikai kifejezések lengyelformára hozása
Előadás másolata:

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

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))

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)

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

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

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

É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

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

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 :=

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 := (

A kifejezés feldolgozása folyt. Következő : “a” - operandus : kiírjuk az outputra! xa := (

A kifejezés feldolgozása folyt. Következő : “*” - művelet : berakjuk a verembe! x a := ( *

A kifejezés feldolgozása folyt. Következő : “b” - operandus : kiírjuk az outputra! x a b := ( *

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

A kifejezés feldolgozása folyt. Következő : “1” - operandus : kiírjuk az outputra! x a b * 1 := ( +

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

A kifejezés feldolgozása folyt. Következő : “/” - művelet : betesszük a verembe! x a b * 1 + := /

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

A kifejezés feldolgozása folyt. Következő : “x” - operandus : kiírjuk az outputra! x a b * 1 + x := / ( (

A kifejezés feldolgozása folyt. Következő : “^” - művelet : betesszük a verembe! x a b * 1 + x := / ( ( ^

A kifejezés feldolgozása folyt. Következő : “z” - operandus : kiírjuk az outputra! x a b * 1 + x z := / ( ( ^

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 ^ := / ( ( ^

A kifejezés feldolgozása folyt. Következő : “2” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 := / ( ( ^

A kifejezés feldolgozása folyt. Következő : “+” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 := / ( ( ^ +

A kifejezés feldolgozása folyt. Következő : “u” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u := / ( ( ^ +

A kifejezés feldolgozása folyt. Következő : “*” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u := / ( ( ^ + *

A kifejezés feldolgozása folyt. Következő : “(” - beteszük a verembe! x a b * 1 + x z ^ 2 u := / ( ( ^ + * (

A kifejezés feldolgozása folyt. Következő : “v” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v := / ( ( ^ + * (

A kifejezés feldolgozása folyt. Következő : “-” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u v := / ( ( ^ + * ( -

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

A kifejezés feldolgozása folyt. Következő : “3” - operandus : kiírjuk az outputra! x a b * 1 + x z ^ 2 u v 3 := / ( ( ^ + * ( -

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

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

A kifejezés feldolgozása folyt. Következő : “*” - művelet : betesszük a verembe! x a b * 1 + x z ^ 2 u v 3 - * + ^ := / ( *

A kifejezés feldolgozása folyt. Következő : “(” - beteszük a verembe! x a b * 1 + x z ^ 2 u v 3 - * + ^ := / ( * (

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

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

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

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

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

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

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