Top Banner
SzlÆvi PØter 99.03.04. Verem tpuskonstrukci 1 Copyright, 1999 ' SzlÆvi PØter Verem tpuskonstrukci SzlÆvi PØter ELTE Informatika Szakmdszertani Csoport [email protected] http://izzo.inf.elte.hu/~szlavi 2005.03.16. ProgramozÆsmdszertan 2 TartalomjegyzØk 1 A verem algebrai specifikÆcija 1.1 Verem-mveletek 1.2 Verem-aximÆk 2 A verem tpuskonstrukci specifikÆcija 2.1 A verem exportmodulja 2.2 A verem megvalstÆsi moduljai 3 AlkalmazÆsi pØldÆk 3.1 EljÆrÆs-orientÆlt nyelvek 3.2 Rekurzi 4 Duplaverem
13

VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

Jan 22, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •1

Copyright, 1999 © Szlávi Péter

Verem típuskonstrukció

Szlávi PéterELTE Informatika Szakmódszertani Csoport

[email protected]://izzo.inf.elte.hu/~szlavi

2005.03.16.Programozásmódszertan 2

⇔Tartalomjegyzék1 A verem algebrai specifikációja

1.1 Verem-műveletek1.2 Verem-axiómák

2 A verem típuskonstrukció specifikációja2.1 A verem exportmodulja2.2 A verem megvalósítási moduljai

3 Alkalmazási példák3.1 Eljárás-orientált nyelvek3.2 Rekurzió

4 Duplaverem

Page 2: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •2

2005.03.16.Programozásmódszertan 3

⇔1 A verem algebrai specifikációja1.1 Verem-műveletekTípus Verem(Elem):

Asszociált műveletek:Üres: VeremÜres?(Verem): LogikaiTele?(Verem): LogikaiTető(Verem): Elem U {NemDef}Verembe(Verem,Elem): Verem U {NemDef}Veremből(Verem): (Verem × Elem) U {NemDef}VeremMélység(Verem): Egész

2005.03.16.Programozásmódszertan 4

⇔1.2 Verem-axiómák

Axiómák:1o Az Üres verem üres.

v=Üres ⇒ Üres?(v) ∧ VeremMélység(v)=02o 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)) ∧

VeremMélység(Verembe(v,e))=VeremMélység(v)+13ao Az üres veremnek nincs legfelső eleme.

Tető(Üres)=NemDef3bo Az Üres veremből nem lehet kivenni elemet.

Veremből(Üres)=NemDef3co A tele verembe nem lehet további elemet betenni.

Tele?(v) ⇒ Verembe(v,e)=NemDef

Page 3: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •3

2005.03.16.Programozásmódszertan 5

⇔1.2 Verem-axiómák (folytatás)

4o A verem legfelső eleme az utoljára betett elem.¬ Tele?(v) ⇒ Tető(Verembe(v,e))=e

5o 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) ⇒ VeremMélység(Veremből(v).Verem))=

VeremMélység(v)-1Biz.:

2o & 5o-ből következik.

2005.03.16.Programozásmódszertan 6

⇔2 A verem típuskonstrukcióspecifikációja

2.1 A verem exportmoduljaExportModul Verem(Típus TElem):Eljárás Üres(Változó v:Verem)Függvény Üres?(Konstans v:Verem): LogikaiFüggvény Tele?(Konstans v:Verem): LogikaiFüggvény Tető(Változó v:Verem): TElemEljárás Verembe(Változó v:Verem,

Konstans e:TElem)Eljárás Veremből(Változó v:Verem, e:TElem)Függvény VeremMélység(Konstans v:Verem): Egész

Meg kell gondolni az operátorok ef/uf-ét az

axiómák alapján!

Page 4: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •4

2005.03.16.Programozásmódszertan 7

⇔2.1 A verem exportmodulja (folytatás)

Infix Operátor Azonos?(Konstans v1,v2:Verem):LogikaiMásnéven v1=v2

Infix Operátor LegyenEgyenlő(Változó v1:Verem,Konstans v2:Verem)

Másnéven v1:=v2Operátor Kiírás(Konstans v:Verem)

Másnéven Ki: vOperátor Beolvasás(Változó v:Verem)

Másnéven Be: vFüggvény Hibás?(Változó v:Verem): Logikai

Modul vége.

2005.03.16.Programozásmódszertan 8

⇔2 A verem típuskonstrukcióspecifikációja

2.2. A verem megvalósítási moduljai2.2.1 Láncolt ábrázolás

Modul Verem(Típus TElem):Reprezentáció

Típus VeremElem=Rekord(érték: TElemalatta: VeremElem'Mutató)

Változó teteje: VeremElem'Mutatómélység: Egészhiba: Logikai

Page 5: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •5

2005.03.16.Programozásmódszertan 9

⇔2.2.1 Láncolt ábrázolás (folytatás)

ImplementációEljárás Üres(Változó v:Verem):

teteje:=Sehova; mélység:=0; hiba:=HamisEljárás vége.Függvény Üres?(Konstans v:Verem): Logikai

Üres?:=teteje=SehovaFüggvény vége.Függvény Tele?(Konstans v:Verem): Logikai

Változó sv: VeremElem'MutatóLefoglal(sv)Ha sv=Sehova akkor

Tele?:=Igazkülönben

Tele?:=Hamis; Felszabadít(sv)Elágazás vége

Függvény vége.

2005.03.16.Programozásmódszertan 10

⇔2.2.1 Láncolt ábrázolás (folytatás)

Függvény Tető(Változó v:Verem): TElemHa teteje≠Sehova akkor Tető:=VeremElem(teteje).érték

különben hiba:=IgazFüggvény vége.Eljárás Verembe(Változó v:Verem, Konstans e:TElem):

Változó új: VeremElem'MutatóLefoglal(új)Ha új≠Sehova akkor

VeremElem(új):=VeremElem(e,teteje)teteje:=új

különbenhiba:=Igaz

Elágazás végeEljárás vége.

Page 6: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •6

2005.03.16.Programozásmódszertan 11

⇔2.2.1 Láncolt ábrázolás (folytatás)

Eljárás Veremből(Változó v:Verem, e:TElem):Változó újteteje: VeremElem'MutatóHa teteje≠Sehova akkor

e:=VeremElem(teteje).értékújteteje:=VeremElem(teteje).alattaFelszabadít(teteje); teteje:=újteteje

különbenhiba:=Igaz

Elágazás végeEljárás vége.Függvény VeremMélység(Konstans v:Verem): Egész

VeremMélység:=mélységFüggvény vége.Függvény Hibás?(Változó v:Verem): Logikai

Hibás?:=hiba; hiba:=HamisFüggvény vége.

2005.03.16.Programozásmódszertan 12

⇔2.2.1 Láncolt ábrázolás (folytatás)

Infix Operátor Azonos?(Konstans v1,v2:Verem):LogikaiMásnéven v1=v2

???Operátor vége.Infix Operátor LegyenEgyenlő(Változó v1:Verem,

Konstans v2:Verem)Másnéven v1:=v2

???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???Operátor vége.

Page 7: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •7

2005.03.16.Programozásmódszertan 13

⇔2.2.1 Láncolt ábrázolás (folytatás)

Inicializálásteteje:=Sehova; mélység:=0; hiba:=Hamis

Modul vége.

2005.03.16.Programozásmódszertan 14

⇔2 A verem típuskonstrukcióspecifikációja

2.2. A verem meglósítási moduljai2.2.2 Folytonos ábrázolásModul Verem(Típus TElem):

ReprezentációKonstans MaxMélység: Egész(???)Típus VeremElemek=Tömb(1..MaxMélység: TElem)Változó ve: VeremElemek

teteje: 0..MaxMélység [teteje≡mélység]hiba: Logikai

Page 8: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •8

2005.03.16.Programozásmódszertan 15

⇔2.2.2 Folytonos ábrázolás (folytatás)

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): LogikaiTele?:=teteje=MaxMélység

Függvény vége.Függvény Tető(Változó v:Verem): TElemHa teteje≠0 akkor Tető:=ve(teteje)

különben hiba:=IgazFüggvény vége.

2005.03.16.Programozásmódszertan 16

⇔2.2.2 Folytonos ábrázolás (folytatás)

Eljárás Verembe(Változó v:Verem, Konstans e:TElem):Ha teteje<MaxMélység akkor

teteje:+1; ve(teteje):=ekülönben

hiba:=IgazElá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:=IgazElágazás vége

Eljárás vége.

Page 9: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •9

2005.03.16.Programozásmódszertan 17

⇔2.2.2 Folytonos ábrázolás (folytatás)

Függvény VeremMélység(Konstans v:Verem): EgészVeremMélység:=teteje

Függvény vége.Függvény Hibás?(Változó v:Verem): LogikaiHibás?:=hiba; hiba:=Hamis

Függvény vége.Infix Operátor Azonos?(Konstans v1, v2:Verem):Logikai

Másnéven v1=v2...

Operátor vége.Infix Operátor LegyenEgyenlő(Változó v1:Verem,

Konstans v2:Verem)Másnéven v1:=v2...

Operátor vége.

2005.03.16.Programozásmódszertan 18

⇔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:=HamisModul vége.

Page 10: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •10

2005.03.16.Programozásmódszertan 19

3 Alkalmazási példák3.1 Eljárás-orientált nyelvek3.2 Rekurzió

2005.03.16.Programozásmódszertan 20

⇔3.1 Eljárás-orientált nyelvek

Hatáskör megvalósításaProgram ...;

Var i,j: Integer; k: Real;Procedure P1(...);

Var i: Real; k: Boolean;Procedure P11(...);

Var j: Boolean;Begin {P11} (k=P1.k : Boolean)

... P11 törzse ... j=P11.j : BooleanEnd; {P11} (i=P1.i : Real)

Begin {P1} k=P1.k : Boolean... P1 törzse .. . (j=Prog.j: Integer)

End; {P1} i=P1.i : RealBegin {Program} k=Prog.k: Real

... Program-törzs ... j=Prog.j: IntegerEnd. i=Prog.i: Integer

Színekkel jelöltük, hogy melyik

szinthez tartozik.A zárójelben levők

valójában nincsenek a veremben.

Page 11: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •11

2005.03.16.Programozásmódszertan 21

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

2005.03.16.Programozásmódszertan 22

⇔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,g(a,b)))p(a,g(a,g(a,b))) ⇒

a:=f(a,g(a,g(a,b)))

y=b x=a-címy=g(a,b) x=a-címy=g(a,g(a,b)) x=a-címy=g(a,g(a,g(a,b))) x=a-cím

a:=?

f(x,y) kiszámolása

Page 12: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •12

2005.03.16.Programozásmódszertan 23

⇔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,g(a,b)))p(a,g(a,g(a,b))) ⇒

a:=f(a,g(a,g(a,b)))

y=b x=a-címy=g(a,b) x=a-címy=g(a,g(a,b)) x=a-címy=g(a,g(a,g(a,b))) x=a-cím

a:=f(a,g(a,g(a,b)))

f(x,y)kiszámolása

2005.03.16.Programozásmódszertan 24

⇔4 Duplaverem

Csak folytonos ábrázolás esetén alkalmazandó ez a típus.ExportModul DuplaVerem(Típus TElem,

Konstans ÖsszMéret:Egész):Eljárás Üres(Változó v:DuplaVerem)Függvény BalÜres?(Konstans v:DuplaVerem): LogikaiFüggvény JobbÜres?(Konstans v:DuplaVerem): LogikaiFüggvény Tele?(Konstans v:DuplaVerem): LogikaiFüggvény BalTető(Változó v:DuplaVerem): TElemFüggvény JobbTető(Változó v:DuplaVerem): TElemEljárás BalVerembe(Változó v:DuplaVerem,

Konstans e:TElem)Eljárás JobbVerembe(Változó v:DuplaVerem,

Konstans e:TElem)

Page 13: VEREM - ELTE · 2005. 2. 2. · SzlÆvi PØter 99.03.04. Verem típuskonstrukció 3 ProgramozÆsmódszertan 5 2005.03.16. 1.2 Verem-axiómÆk (folytatÆs) 4o A verem legfels0 eleme

•Szlávi Péter •99.03.04.

•Verem típuskonstrukció •13

2005.03.16.Programozásmódszertan 25

⇔4 Duplaverem (folytatás)Függvény BalVeremMélység(Konstans v:DuplaVerem):

EgészFüggvény JobbVeremMélység(Konstans v:DuplaVerem):

EgészEljárás BalVeremből(Változó v:DuplaVerem,e:ElemÉrték)Eljárás JobbVeremből(Változó v:DuplaVerem, e:ElemÉrték)Infix Operátor Azonos?(Konstans v1,v2:DuplaVerem):

LogikaiMásnéven v1=v2Infix Operátor LegyenEgyenlő(Változó v1:DuplaVerem,

Konstans v2:DuplaVerem) Másnéven v1:=v2Függvény Hibás?(Változó v:DuplaVerem): LogikaiModul vége.