Verem tpuskonstrukci Szlvi Pter ELTE IK Mdia s

  • Slides: 29
Download presentation
Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék szlavip@elte. hu http: //people.

Verem típuskonstrukció Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék szlavip@elte. hu http: //people. inf. elte. hu/szlavi Copyright, 1999 © Szlávi Péter

 Tartalomjegyzék 1 A verem algebrai specifikációja 1. 1 Verem-műveletek 1. 2 Verem-axiómák 2

Tartalomjegyzék 1 A verem algebrai specifikációja 1. 1 Verem-műveletek 1. 2 Verem-axiómák 2 A verem típuskonstrukció specifikációja 2. 1 A verem exportmodulja 2. 2 A verem megvalósítási moduljai 3 Alkalmazási példák 3. 1 Eljárás-orientált nyelvek 3. 2 Rekurzió 4 Duplaverem Programozásmódszertan 2 2021. 10. 18.

1 A verem algebrai specifikációja 1. 1 Verem-műveletek Típus Verem(Elem): Asszociált műveletek: Üres: Verem

1 A verem algebrai specifikációja 1. 1 Verem-műveletek Típus Verem(Elem): Asszociált műveletek: Üres: Verem Üres? (Verem): Logikai Tele? (Verem): Logikai Tető(Verem): Elem {Nem. Def} Verembe(Verem, Elem): Verem {Nem. Def} Veremből(Verem): (Verem Elem) {Nem. Def} Verem. Mélység(Verem): Egész Programozásmódszertan 3 2021. 10. 18.

 1. 2 Verem-axiómák Axiómák: 1 o Az Üres verem üres. v=Üres Üres? (v)

1. 2 Verem-axiómák Axiómák: 1 o Az Üres verem üres. v=Üres Üres? (v) Verem. Mélység(v)=0 2 o Az a verem, amelyben legalább egy elem van, az nem üres; a verembe tétel során a veremmélysége eggyel nő. Tele? (v) Üres? (Verembe(v, e)) Verem. Mélység(Verembe(v, e))=Verem. Mélység(v)+1 3 ao Az üres veremnek nincs legfelső eleme. Tető(Üres)=Nem. Def 3 bo Az Üres veremből nem lehet kivenni elemet. Veremből(Üres)=Nem. Def 3 co A tele verembe nem lehet további elemet betenni. Tele? (v) Verembe(v, e)=Nem. Def Programozásmódszertan 4 2021. 10. 18.

 1. 2 Verem-axiómák (folytatás) 4 o A verem legfelső eleme az utoljára betett

1. 2 Verem-axiómák (folytatás) 4 o A verem legfelső eleme az utoljára betett elem. Tele? (v) Tető(Verembe(v, e))=e 5 o A veremből a legfelső elemet lehet kivenni (a többi nem változik). Tele? (v) Veremből(Verembe(v, e))=(v, e) Állítás: a Veremből művelet eggyel csökkenti a verem mélységét. Tele? (v) Verem. Mélység(Veremből(v). Verem))= Verem. Mélység(v)-1 Biz. : 2 o & 5 o-ből következik. Programozásmódszertan 5 2021. 10. 18.

 2 A verem típuskonstrukció specifikációja 2. 1 A verem exportmodulja Export. Modul Verem(Típus

2 A verem típuskonstrukció specifikációja 2. 1 A verem exportmodulja Export. Modul Verem(Típus TElem): Eljárás Üres(Változó v: Verem) [Ef: v Uf: v v=( )] Függvény Üres? (Konstans v: Verem): Logikai [Ef: v Uf: v=(v 1, …, v. N) Üres? (v)=N=0] Függvény Tele? (Konstans v: Verem): Logikai [Ef: v Uf: ? ? ? ] Függvény Tető(Változó v: Verem): TElem [Ef: v Uf: v=(v 1, …, v. N) Tető(v)=v. N] Programozásmódszertan 6 2021. 10. 18.

 2. 1 A verem exportmodulja (folytatás) Eljárás Verembe(Változó v: Verem, Konstans e: TElem)

2. 1 A verem exportmodulja (folytatás) Eljárás Verembe(Változó v: Verem, Konstans e: TElem) [Ef: v Uf: v=(v 1, …, v. N) Verembe(v, e)=(v 1, …, v. N, e)] Eljárás Veremből(Változó v: Verem, e: TElem) [Ef: v v=(v 1, …, v. N) N>0 Uf: Veremből(v)=(v’, e) v’=(v 1, …, v. N-1) e=v. N] Függvény Verem. Mélység(Konstans v: Verem): Egész [Ef: v Uf: v=(v 1, …, v. N) Verem. Mélység(v)=N] Programozásmódszertan 7 2021. 10. 18.

 2. 1 A verem exportmodulja (folytatás) Infix Operátor Azonos? (Konstans v 1, v

2. 1 A verem exportmodulja (folytatás) Infix Operátor Azonos? (Konstans v 1, v 2: Verem): Logikai Másnéven v 1=v 2 Infix Operátor Legyen. Egyenlő(Változó v 1: Verem, Konstans v 2: Verem) Másnéven v 1: =v 2 Operátor Kiírás(Konstans v: Verem) Másnéven Ki: v Operátor Beolvasás(Változó v: Verem) Másnéven Be: v Meg kell gondolni az operátorok ef/uf-ét az axiómák alapján! Függvény Hibás? (Változó v: Verem): Logikai Modul vége. Programozásmódszertan 8 2021. 10. 18.

 2 A verem típuskonstrukció specifikációja 2. 2. A verem megvalósítási moduljai 2. 2.

2 A verem típuskonstrukció specifikációja 2. 2. A verem megvalósítási moduljai 2. 2. 1 Láncolt ábrázolás Modul Verem(Típus TElem): Reprezentáció Típus Verem. Elem=Rekord(érték: TElem alatta: Verem. Elem'Mutató) Változó teteje: Verem. Elem'Mutató mélység: Egész hiba: Logikai Programozásmódszertan 9 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Implementáció Eljárás Üres(Változó v: Verem): [Ef: –

2. 2. 1 Láncolt ábrázolás (folytatás) Implementáció Eljárás Üres(Változó v: Verem): [Ef: – l. az inicializáló részt Uf: teteje=Sehova mélység=0 hiba=Hamis] teteje: =Sehova; mélység: =0; hiba: =Hamis Eljárás vége. Függvény Üres? (Konstans v: Verem): Logikai [Ef: – Uf: Üres? =teteje=Sehova] Üres? : =teteje=Sehova Függvény vége. Programozásmódszertan 10 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Függvény Tele? (Konstans v: Verem): Logikai [Ef:

2. 2. 1 Láncolt ábrázolás (folytatás) Függvény Tele? (Konstans v: Verem): Logikai [Ef: – Uf: ? ? ? ] Változó sv: Verem. Elem'Mutató Lefoglal(sv) Ha sv=Sehova akkor Tele? : =Igaz különben Tele? : =Hamis; Felszabadít(sv) Elágazás vége Függvény vége. Programozásmódszertan 11 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Függvény Tető(Változó v: Verem): TElem [Ef: teteje

2. 2. 1 Láncolt ábrázolás (folytatás) Függvény Tető(Változó v: Verem): TElem [Ef: teteje Sehova Uf: Tető(v)=Verem. Elem(teteje). érték] Ha teteje Sehova akkor Tető: =Verem. Elem(teteje). érték különben hiba: =Igaz Elágazás vége Függvény vége. Programozásmódszertan 12 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Eljárás Verembe(Változó v: Verem, Konstans e: TElem):

2. 2. 1 Láncolt ábrázolás (folytatás) Eljárás Verembe(Változó v: Verem, Konstans e: TElem): [Ef: új: Verem. Elem Uf: új=(e, teteje) teteje’=új mélység’=mélység+1] Változó új: Verem. Elem'Mutató Lefoglal(új) Ha új Sehova akkor Verem. Elem(új): =Verem. Elem(e, teteje) teteje: =új; mélység: +1 különben hiba: =Igaz Elágazás vége Eljárás vége. Programozásmódszertan 13 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Eljárás Veremből(Változó v: Verem, e: TElem): [Ef:

2. 2. 1 Láncolt ábrázolás (folytatás) Eljárás Veremből(Változó v: Verem, e: TElem): [Ef: teteje Sehova Uf: e=Verem. Elem(teteje). érték teteje’=Verem. Elem(teteje). alatta mélység’=mélység-1] Változó újteteje: Verem. Elem'Mutató Ha teteje Sehova akkor e: =Verem. Elem(teteje). érték újteteje: =Verem. Elem(teteje). alatta Felszabadít(teteje); teteje: =újteteje; mélység: -1 különben hiba: =Igaz Elágazás vége Eljárás vége. Programozásmódszertan 14 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Függvény Verem. Mélység(Konstans v: Verem): Egész [Ef:

2. 2. 1 Láncolt ábrázolás (folytatás) Függvény Verem. Mélység(Konstans v: Verem): Egész [Ef: – Uf: Verem. Mélység(v)=mélység] Verem. Mélység: =mélység Függvény vége. Függvény Hibás? (Változó v: Verem): Logikai [Ef: – Uf: Hibás(v)=hiba hiba’=Hamis] Hibás? : =hiba; hiba: =Hamis Függvény vége. Programozásmódszertan 15 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Infix Operátor Azonos? (Konstans v 1, v

2. 2. 1 Láncolt ábrázolás (folytatás) Infix Operátor Azonos? (Konstans v 1, v 2: Verem): Logikai Másnéven v 1=v 2 ? ? ? Operátor vége. Infix Operátor Legyen. Egyenlő(Változó v 1: Verem, Konstans v 2: Verem) Másnéven v 1: =v 2 ? ? ? Operátor vége. Operátor Kiírás(Konstans v: Verem) Másnéven Ki: v ? ? ? Operátor vége. Operátor Beolvasás(Változó v: Verem) Másnéven Be: v Meg kell gondolni az ? ? ? műveletek ef/uf-ét az Operátor vége. exportmodul alapján! Programozásmódszertan 16 2021. 10. 18.

 2. 2. 1 Láncolt ábrázolás (folytatás) Inicializálás teteje: =Sehova; mélység: =0; hiba: =Hamis

2. 2. 1 Láncolt ábrázolás (folytatás) Inicializálás teteje: =Sehova; mélység: =0; hiba: =Hamis Modul vége. Programozásmódszertan 17 2021. 10. 18.

 2 A verem típuskonstrukció specifikációja 2. 2. A verem meglósítási moduljai 2. 2.

2 A verem típuskonstrukció specifikációja 2. 2. A verem meglósítási moduljai 2. 2. 2 Folytonos ábrázolás Modul Verem(Típus TElem): Reprezentáció Konstans Max. Mélység: Egész(? ? ? ) Típus Verem. Elemek=Tömb(1. . Max. Mélység: TElem) Változó ve: Verem. Elemek teteje: 0. . Max. Mélység [teteje mélység] hiba: Logikai Programozásmódszertan 18 2021. 10. 18.

 2. 2. 2 Folytonos ábrázolás (folytatás) Meg kell gondolni a műveletek ef/uf-ét az

2. 2. 2 Folytonos ábrázolás (folytatás) Meg kell gondolni a műveletek ef/uf-ét az exportmodul alapján! Eljárás Üres(Változó v: Verem): teteje: =0; hiba: =Hamis Eljárás vége. Függvény Üres? (Konstans v: Verem): Logikai Üres? : =teteje=0 Függvény vége. Függvény Tele? (Konstans v: Verem): Logikai Tele? : =teteje=Max. Mélység Függvény vége. Függvény Tető(Változó v: Verem): TElem Ha teteje 0 akkor Tető: =ve(teteje) különben hiba: =Igaz Függvény vége. Programozásmódszertan 19 2021. 10. 18.

 2. 2. 2 Folytonos ábrázolás (folytatás) Eljárás Verembe(Változó v: Verem, Konstans e: TElem):

2. 2. 2 Folytonos ábrázolás (folytatás) Eljárás Verembe(Változó v: Verem, Konstans e: TElem): Ha teteje<Max. Mélység akkor teteje: +1; ve(teteje): =e különben hiba: =Igaz Elágazás vége Eljárás vége. Eljárás Veremből(Változó v: Verem, e: TElem): Ha teteje>0 akkor e: =ve(teteje); teteje: -1 különben hiba: =Igaz Elágazás vége Eljárás vége. Programozásmódszertan 20 2021. 10. 18.

 2. 2. 2 Folytonos ábrázolás (folytatás) Függvény Verem. Mélység(Konstans v: Verem): Egész Verem.

2. 2. 2 Folytonos ábrázolás (folytatás) Függvény Verem. Mélység(Konstans v: Verem): Egész Verem. Mélység: =teteje Függvény vége. Függvény Hibás? (Változó v: Verem): Logikai Hibás? : =hiba; hiba: =Hamis Függvény vége. Infix Operátor Azonos? (Konstans v 1, v 2: Verem): Logikai Másnéven v 1=v 2. . . Operátor vége. Infix Operátor Legyen. Egyenlő(Változó v 1: Verem, Konstans v 2: Verem) Másnéven v 1: =v 2. . . Operátor vége. Programozásmódszertan 21 2021. 10. 18.

 2. 2. 2 Folytonos ábrázolás (folytatás) Operátor Kiírás(Konstans v: Verem) Másnéven Ki: v

2. 2. 2 Folytonos ábrázolás (folytatás) Operátor Kiírás(Konstans v: Verem) Másnéven Ki: v … Operátor vége. Operátor Beolvasás(Változó v: Verem) Másnéven Be: v … Operátor vége. Inicializálás teteje: =0; hiba: =Hamis Modul vége. Programozásmódszertan 22 2021. 10. 18.

 3 Alkalmazási példák 3. 1 Eljárás-orientált nyelvek 3. 2 Rekurzió Programozásmódszertan 23 2021.

3 Alkalmazási példák 3. 1 Eljárás-orientált nyelvek 3. 2 Rekurzió Programozásmódszertan 23 2021. 10. 18.

3. 1 Eljárás-orientált nyelvek Hatáskör megvalósítása Program. . . ; Var i, j: Integer;

3. 1 Eljárás-orientált nyelvek Hatáskör megvalósítása Program. . . ; Var i, j: Integer; k: Real; Procedure P 1(. . . ); Var i: Real; k: Boolean; Procedure P 11(. . . ); Var j: Boolean; Begin {P 11}. . . P 11 törzse. . . End; {P 11} Begin {P 1}. . . P 1 törzse. . . End; {P 1} Begin {Program}. . . Program-törzs. . . End. Programozásmódszertan Színekkel jelöltük, hogy melyik szinthez tartozik. A zárójelben levők valójában nincsenek a veremben. (k=P 1. k : j=P 11. j : (i=P 1. i : k=P 1. k : (j=Prog. j: i=P 1. i : k=Prog. k: j=Prog. j: i=Prog. i: 24 Boolean) Boolean Real) Boolean Integer) Real Integer 2021. 10. 18.

 3. 1 Eljárás-orientált nyelvek (folytatás) Eljárás/függvény-hívás megszervezése • a paraméter- (és lokális adat-)

3. 1 Eljárás-orientált nyelvek (folytatás) Eljárás/függvény-hívás megszervezése • a paraméter- (és lokális adat-) és • a visszatérési veremmel. Programozásmódszertan 25 2021. 10. 18.

 3. 2 Rekurzió Eljárás e(Változó x: TX, Konstans y: TY): Ha p(x, y)

3. 2 Rekurzió Eljárás e(Változó x: TX, Konstans y: TY): Ha p(x, y) akkor x: =f(x, y) különben e(x, g(x, y)) Eljárás vége. Veremállapot a hívások után (fejtetőre állítva): e(a, b): p(a, b) e(a, g(a, b)) p(a, g(a, b)) e(a, g(a, b))) p(a, g(a, b))) a: =f(a, g(a, b))) f(x, y) kiszámolása y=b x=a-cím y=g(a, b)) x=a-cím y=g(a, b))) x=a-cím a: =? Programozásmódszertan 26 2021. 10. 18.

 3. 2 Rekurzió Eljárás e(Változó x: TX, Konstans y: TY): Ha p(x, y)

3. 2 Rekurzió Eljárás e(Változó x: TX, Konstans y: TY): Ha p(x, y) akkor x: =f(x, y) különben e(x, g(x, y)) Eljárás vége. Veremállapot a hívások után (fejtetőre állítva): e(a, b): p(a, b) e(a, g(a, b)) p(a, g(a, b)) e(a, g(a, b))) p(a, g(a, b))) a: =f(a, g(a, b))) f(x, y)kiszámolása y=b x=a-cím y=g(a, b)) x=a-cím y=g(a, b))) x=a-cím a: =f(a, g(a, b))) Programozásmódszertan 27 2021. 10. 18.

 4 Duplaverem Csak folytonos ábrázolás esetén alkalmazandó ez a típus. Export. Modul Dupla.

4 Duplaverem Csak folytonos ábrázolás esetén alkalmazandó ez a típus. Export. Modul Dupla. Verem(Típus TElem, Konstans Össz. Méret: Egész): Eljárás Üres(Változó v: Dupla. Verem) Függvény BalÜres? (Konstans v: Dupla. Verem): Logikai Függvény JobbÜres? (Konstans v: Dupla. Verem): Logikai Függvény Tele? (Konstans v: Dupla. Verem): Logikai Függvény Bal. Tető(Változó v: Dupla. Verem): TElem Függvény Jobb. Tető(Változó v: Dupla. Verem): TElem Eljárás Bal. Verembe(Változó v: Dupla. Verem, Konstans e: TElem) Eljárás Jobb. Verembe(Változó v: Dupla. Verem, Konstans e: TElem) Programozásmódszertan 28 2021. 10. 18.

 4 Duplaverem (folytatás) Függvény Bal. Verem. Mélység(Konstans v: Dupla. Verem): Egész Függvény Jobb.

4 Duplaverem (folytatás) Függvény Bal. Verem. Mélység(Konstans v: Dupla. Verem): Egész Függvény Jobb. Verem. Mélység(Konstans v: Dupla. Verem): Egész Eljárás Bal. Veremből(Változó v: Dupla. Verem, e: ElemÉrték) Eljárás Jobb. Veremből(Változó v: Dupla. Verem, e: ElemÉrték) Infix Operátor Azonos? (Konstans v 1, v 2: Dupla. Verem): Logikai Másnéven v 1=v 2 Infix Operátor Legyen. Egyenlő(Változó v 1: Dupla. Verem, Konstans v 2: Dupla. Verem) Másnéven v 1: =v 2 Függvény Hibás? (Változó v: Dupla. Verem): Logikai Modul vége. Programozásmódszertan 29 2021. 10. 18.