listen
DESCRIPTION
Listen. Klaus Becker 2003. Listen. Ansgar A., Speyer Claudia B., Koblenz Knut B., Neustadt Annett B., Wörrstadt Stefani D., Bad Ems Jochen F., Ludwigshafen ... ... Wieland S., Trier Harald T.-R., Biesdorf. Teil 1. Objektorientierte Modellierung und Implementierung von Listen. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/1.jpg)
ListenListen
Klaus Becker2003
![Page 2: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/2.jpg)
2
KB
Liste
nListenListen
Ansgar A., SpeyerClaudia B., KoblenzKnut B., NeustadtAnnett B., WörrstadtStefani D., Bad EmsJochen F., Ludwigshafen......Wieland S., TrierHarald T.-R., Biesdorf
![Page 3: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/3.jpg)
3
KB
Liste
nTeil 1Teil 1
Objektorientierte Modellierung und Implementierung von Listen
![Page 4: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/4.jpg)
4
KB
Liste
nWas ist eine Liste?Was ist eine Liste?
LisaRolandAnnaGerdStefanieSusanneWalterUlrikeTheo...
Bernd
Eine Liste ist eine endliche, beliebig lange Folge von Elementen, in der an jeder Stelle neue Elemente eingefügt oder vorhandene Elemente entfernt werden können.
Ziel ist es zunächst, die dynamische Datenstruktur „Liste“ mit Hilfe einer geeigneten Klasse zu implementieren.
![Page 5: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/5.jpg)
5
KB
Liste
nObjektorientierte RepräsentationObjektorientierte Repräsentation
... = Lisa
... = Roland
... = Anna
... = Gerd
... = Bernd
...
LisaRolandAnnaGerdStefanieSusanneWalterUlrike...
Bernd
![Page 6: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/6.jpg)
6
KB
Liste
nObjektorientierte RepräsentationObjektorientierte Repräsentation
... = Lisa
... = Roland
... = Anna
... = Gerd
... = Bernd
Die Listenelemente werden mit Hilfe von Objekten beschrieben.Die Folgenstruktur der Liste wird mit Hilfe von Referenzen aufgebaut.
...
![Page 7: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/7.jpg)
7
KB
Liste
nObjektorientierte RepräsentationObjektorientierte Repräsentation
... = Lisa
... = Roland
... = Anna
... = Gerd
... = Bernd
...
Knoten
![Page 8: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/8.jpg)
8
KB
Liste
nObjektorientierte RepräsentationObjektorientierte Repräsentation
Spezielle Liste: String-Liste
Verallgemeinerte Liste: Objekt-Liste
![Page 9: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/9.jpg)
9
KB
Liste
nKlassendiagrammKlassendiagramm
Liste
anfang: Knoten
...
Knoten
next: Knoteninhalt: string
...
Spezielle Liste:
kenntkennt
![Page 10: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/10.jpg)
10
KB
Liste
nKlassendiagrammKlassendiagramm
Liste
anfang: Knoten
...
Knoten
next: Knoteninhalt:
...
Object
Verallgemeinerte Liste:
kennt kennt
hat
![Page 11: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/11.jpg)
11
KB
Liste
nImplementierungImplementierung
type TKnoten = class private next : TKnoten; inhalt : TObject; public ... end;
type TListe = class private anfang : TKnoten; public ... end;
Liste
anfang: Knoten
...
Knoten
next: Knoteninhalt:
...
Object
![Page 12: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/12.jpg)
12
KB
Liste
nListenoperationenListenoperationen
{ liste: [ ] } liste.create
{ liste: [Lisa] }liste.insert(0, Lisa)
{ liste: [Lisa; Anna] }liste.insert(1, Anna)
liste.insert(1, Roland){ liste: [Lisa; Roland; Anna] }
{ liste: [Lisa; Anna] }liste.delete(1)
liste.items(1) Annaliste.getCount 2
Liste
- anfang: Knoten- count: integer
+ create+ getCount: integer- knotenItems(pos: integer) : Knoten+ items(pos: integer): Object+ delete(pos: integer)+ insert(pos: integer; obj: Object)
Hilfsoperation
![Page 13: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/13.jpg)
13
KB
Liste
nknotenItems – SpezifikationknotenItems – Spezifikation
liste.knotenItems(2)
Die Funktion „knotenItems“ bestimmt den i-ten Knoten der Liste, wobei i = pos+1.
function TListe.knotenItems(pos: integer): TKnoten;
![Page 14: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/14.jpg)
14
KB
Liste
nliste.knotenItems(2) – Traceliste.knotenItems(2) – Trace
z := 0; k := anfang;
![Page 15: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/15.jpg)
15
KB
Liste
nliste.knotenItems(2) – Traceliste.knotenItems(2) – Trace
inc(z); k := k.getNext;
![Page 16: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/16.jpg)
16
KB
Liste
nliste.knotenItems(2) – Traceliste.knotenItems(2) – Trace
inc(z); k := k.getNext;
![Page 17: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/17.jpg)
17
KB
Liste
nliste.knotenItems(2) – Traceliste.knotenItems(2) – Trace
result := k;
![Page 18: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/18.jpg)
18
KB
Liste
nknotenItems – AlgorithmusknotenItems – Algorithmus
beginz := 0;k := anfang;while ((z < pos) and (z < count)) do begin inc(z); k := k.getNext; end;result := k;end;
![Page 19: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/19.jpg)
19
KB
Liste
nitems – Spezifikationitems – Spezifikation
liste.items(2)
Die Funktion „items“ bestimmt den Inhalt des i-ten Knotens der Liste, wobei i = pos+1.
function TListe.items(pos: integer): TObject;
![Page 20: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/20.jpg)
20
KB
Liste
nitems – Algorithmusitems – Algorithmus
function TListe.items (pos: integer): TObject;beginif ((pos >= 0) and (pos < count)) then result := knotenItems(pos).getInhaltelse result := nil;end;
![Page 21: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/21.jpg)
21
KB
Liste
ndelete – Spezifikationdelete – Spezifikation
liste.delete(2)
procedure TListe.delete(pos: integer);
![Page 22: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/22.jpg)
22
KB
Liste
nliste.delete(2) – Trace liste.delete(2) – Trace
hilf := knotenItems(pos);
![Page 23: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/23.jpg)
23
KB
Liste
nliste.delete(2) – Traceliste.delete(2) – Trace
knotenItems(pos-1). setNext(knotenItems(pos).getNext);
![Page 24: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/24.jpg)
24
KB
Liste
nliste.delete(2) – Traceliste.delete(2) – Trace
hilf.getInhalt.free; hilf.free;dec(count)
![Page 25: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/25.jpg)
25
KB
Liste
nAchtung: liste.delete(0)Achtung: liste.delete(0)
knotenItems(pos-1). setNext(knotenItems(pos).getNext);
![Page 26: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/26.jpg)
26
KB
Liste
nAchtung: liste.delete(0)Achtung: liste.delete(0)
anfang := knotenItems(pos).getNext
![Page 27: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/27.jpg)
27
KB
Liste
ndelete – Algorithmusdelete – Algorithmus
![Page 28: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/28.jpg)
28
KB
Liste
ninsert – Spezifikationinsert – Spezifikation
liste.insert(2,o)
procedure TListe.insert(pos: integer; obj: TObject);
![Page 29: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/29.jpg)
29
KB
Liste
nliste.insert(2,o) – Traceliste.insert(2,o) – Trace
danach := knotenItems(pos);
![Page 30: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/30.jpg)
30
KB
Liste
nliste.insert(2,o) – Traceliste.insert(2,o) – Trace
neu := TKnoten.create(danach,obj);
![Page 31: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/31.jpg)
31
KB
Liste
nliste.insert(2,o) – Traceliste.insert(2,o) – Trace
knotenItems(pos-1).setNext(neu);inc(count);
![Page 32: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/32.jpg)
32
KB
Liste
nVorsicht: liste.insert(0,o)Vorsicht: liste.insert(0,o)
knotenItems(pos-1).setNext(neu);
![Page 33: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/33.jpg)
33
KB
Liste
ninsert – Algorithmusinsert – Algorithmus
![Page 34: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/34.jpg)
34
KB
Liste
nAufgabeAufgabe
Entwickeln Sie mit Hilfe der Trace-Beispiele die Algorithmen zu den beiden Operationen delete und insert.Erstellen Sie ein neues Delphi-Projekt (in einem neuen Ordner) und implementieren Sie die Klasse TListe.
![Page 35: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/35.jpg)
35
KB
Liste
nLösung: delete – AlgorithmusLösung: delete – Algorithmus
procedure TListe.delete(pos: integer); var hilf: TKnoten;beginif pos <= count-1 then begin hilf := knotenItems(pos); if pos = 0 then anfang := knotenItems(pos).getNext else knotenItems(pos-1).setNext(knotenItems(pos).getNext); hilf.getInhalt.free; hilf.free; dec(count); end;end;
![Page 36: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/36.jpg)
36
KB
Liste
nLösung: insert – AlgorithmusLösung: insert – Algorithmus
procedure TListe.insert (pos: integer; obj: TObject); var neu, danach: TKnoten;beginif pos <= count then begin if pos = 0 then begin danach := anfang; neu := TKnoten.create(danach, obj); anfang := neu; inc(count); end else begin danach := knotenItems(pos); neu := TKnoten.create(danach, obj); knotenItems(pos-1).setNext(neu); inc(count); end; end;end;
![Page 37: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/37.jpg)
37
KB
Liste
nListentestListentest
Ziel ist es, ein Programm zu erstellen, mit dessen Hilfe die Implementierung der Klasse „TListe“ gestestet werden kann.Z. B.: Es soll eine Namensliste [Lisa; Anna; ...] erstellt und angezeigt werden.
![Page 38: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/38.jpg)
38
KB
Liste
nSpezialisierungSpezialisierung
Spezialisierte Liste:
Allgemeine Liste:
![Page 39: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/39.jpg)
39
KB
Liste
nSpezialisierungSpezialisierung
Liste
anfang: Knoten
...
Knoten
next: Knoteninhalt:
... Element
Object
wert: String
create(w: String)setWert(w: String)getWert: String
kenntkennt
hatist
![Page 40: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/40.jpg)
40
KB
Liste
nErzeugung einer ListeErzeugung einer Liste
liste := TListe.create;e := TElement.create('Lisa');liste.insert(0,e);e := TElement.create('Anna');liste.insert(1,e);...
![Page 41: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/41.jpg)
41
KB
Liste
nAnzeige einer ListeAnzeige einer Liste
h := '';for i := 0 to liste.getCount-1 do begin w := TElement(liste.items(i)).getWert; h := h + ' ' + w; end;PListe.Caption := h;
Hilfsvariable
Anzeige-Panel
Typumwandlung: TObject TElement
![Page 42: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/42.jpg)
42
KB
Liste
nAufgabeAufgabe
Die Klasse „TElement“ ist noch nicht implementiert. Ergänzen Sie die fehlenden Teile.Erstellen Sie eine einfache Testoberfläche und ergänzen Sie die Methodenaufrufe zur Erzeugung und zur Anzeige einer TestlisteZur Kontrolle: Listen2
![Page 43: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/43.jpg)
43
KB
Liste
nTeil 2Teil 2
Anwendung: Lexikon
![Page 44: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/44.jpg)
44
KB
Liste
nAuftragAuftrag
Aus: H. Balzert: Lehrbuch Grundlagen der Informatik, S. 137.
Ziel ist es, ein Programm zur Erstellung und Benutzung eines Glossars (Lexikons) zu entwickeln.
![Page 45: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/45.jpg)
45
KB
Liste
nPflichtenheftPflichtenheft
/0/ Das Lexikon ist eine endliche Folge von Einträgen. Jeder Eintrag liefert eine Erläuterung zu einem Stichwort./1/ Im Lexikon kann der Benutzer eine Erklärung zu einem Stichwort nachschlagen. Der Benutzer muss hierzu das ihn interessierende Stichwort eingeben./2/ Das Lexikon kann vom Benutzer ergänzt und verändert werden: Es können jederzeit neue Einträge eingefügt und bereits bestehende Einträge gelöscht werden./3/ Das Lexikon kann extern gespeichert und wieder geladen werden.
![Page 46: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/46.jpg)
46
KB
Liste
nPrototypPrototyp
![Page 47: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/47.jpg)
47
KB
Liste
nOOAOOA
Ein Lexikon ist eine endliche Folge von Einträgen. Jeder Eintrag liefert eine Erläuterung zu einem Stichwort.Im Lexikon kann man eine Erklärung zu einem Stichwort nachschlagen. Das Lexikon kann ergänzt und verändert werden: Es können neue Einträge eingefügt und bereits bestehende Einträge gelöscht werden.Das Lexikon kann extern gespeichert und wieder geladen werden.
![Page 48: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/48.jpg)
48
KB
Liste
nOODOOD
„create“ erstellt ein neues Listenobjekt „liste“.„addEintrag“ erstellt zunächst ein „Eintrag“-Objekt und fügt es dann in „liste“ ein.„delEintrag“ durchsucht zunächst die Liste „liste“ nach dem „stichwort“ und bestimmt gegebenenfalls die Position. Anschließend wird der zugehörige Eintrag in der Liste gelöscht.„getErlaeuterung“ liefert zu dem „stichwort“ die zugehörige Erläuterung im Lexikon.
![Page 49: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/49.jpg)
49
KB
Liste
nAlgorithmenAlgorithmen
constructor TLexikon.create;beginliste := TListe.create(nil); end;
procedure TLexikon.addEintrag(stichwort, erlaeuterung: string); var eintrag: TEintrag;begineintrag := TEintrag.create(stichwort,erlaeuterung);liste.insert(0,eintrag); end;
![Page 50: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/50.jpg)
50
KB
Liste
nAlgorithmenAlgorithmen
procedure TLexikon.delEintrag(stichwort: string); var i, position: integer;beginposition := -1;for i := 0 to liste.getCount-1 do if TEintrag(liste.items(i)).getStichwort = stichwort then position := i; if position >= 0 then liste.delete(position); end;
![Page 51: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/51.jpg)
51
KB
Liste
nAlgorithmenAlgorithmen
function TLexikon.getErlaeuterung(stichwort: string): string; var position: integer; erlaeuterung: string;beginerlaeuterung := 'kein Eintrag gefunden!';for position := 0 to liste.getCount-1 do if TEintrag(liste.items(position)).getStichwort = stichwort then erlaeuterung := TEintrag(liste.items(position)).getErlaeuterung;result := erlaeuterung;end;
![Page 52: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/52.jpg)
52
KB
Liste
nAufgabeAufgabe
Delphi verfügt über eine vordefinierte Klasse „TList“. Informieren Sie sich über diese Klasse mit der Delphi-Hilfe. Implementieren Sie dann das Lexikon mit dieser vordefinierten Klasse „TList“ an Stelle der selbst entwickelten Klasse „TListe“.Zur Kontrolle: siehe Lexikon2
![Page 53: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/53.jpg)
53
KB
Liste
nZum VergleichZum Vergleich
unit uLexikon;interfaceuses uEintrag, classes {TList};type TLexikon = class private liste: TList; public constructor create; ... end;
unit uLexikon;interfaceuses uEintrag, uListe {TListe};type TLexikon = class private liste: TListe; public constructor create; ... end;
Vordefinierte Liste
Selbstdefinierte Liste
![Page 54: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/54.jpg)
54
KB
Liste
nZum VergleichZum Vergleich
constructor TLexikon.create;beginliste := TListe.create; // liste := TList.create;end;
Vordefinierte Liste
Selbstdefinierte Liste
![Page 55: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/55.jpg)
55
KB
Liste
nZum VergleichZum Vergleich
procedure TLexikon.addEintrag(stichwort, erlaeuterung: string); var eintrag: TEintrag;begineintrag := TEintrag.create(stichwort,erlaeuterung);liste.insert(0,eintrag); // liste.Insert(0, eintrag);end;
Vordefinierte Liste
Selbstdefinierte Liste
![Page 56: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/56.jpg)
56
KB
Liste
nZum VergleichZum Vergleich
procedure TLexikon.delEintrag(stichwort: string); var i, position: integer;beginposition := -1;for i := 0 to liste.getCount-1 do // liste.Count-1 if TEintrag(liste.items(i)).getStichwort = stichwort then position := i; // liste.Items[i] if position >= 0 then liste.delete(position); // liste.Delete(position)end;
Vordefinierte Liste
Selbstdefinierte Liste
![Page 57: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/57.jpg)
57
KB
Liste
nZum VergleichZum Vergleich
function TLexikon.getErlaeuterung(stichwort: string): string; var position: integer; erlaeuterung: string;beginerlaeuterung := 'kein Eintrag gefunden!';for position := 0 to liste.getCount-1 do // liste.Count-1 if TEintrag(liste.items(position)).getStichwort = stichwort then erlaeuterung := TEintrag(liste.items(position)).getErlaeuterung;result := erlaeuterung;end; // liste.Items[position]
Vordefinierte Liste
Selbstdefinierte Liste
![Page 58: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/58.jpg)
58
KB
Liste
nZum VergleichZum Vergleich
TListe
- anfang: Knoten- count: integer
+ create(k: Knoten)+ getCount: integer- knotenItems(pos: integer) : Knoten+ items(pos: integer): TObject+ delete(pos: integer)+ insert(pos: integer; obj: TObject)
TList
+ Count: integer+ Items[pos: integer]: Pointer
+ create+ Delete(pos: integer)+ Insert(pos: integer; obj: Pointer)...
Properties
![Page 59: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/59.jpg)
59
KB
Liste
nTeil 3Teil 3
Stapel und Schlangen
![Page 60: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/60.jpg)
60
KB
Liste
nAuswertung von TermenAuswertung von Termen
Term: ( 7 - 2 ) * 3 =
7
(
-
( 7
2
( 7 -
)
*
5
3
* 5
( 7 - 2
=
* 5 3
15
OperandenstapelOperatorenstapel
![Page 61: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/61.jpg)
61
KB
Liste
nStapelStapel
LIFO-Prinzip: last in, first out
mitErstem erstes ohneErstes
![Page 62: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/62.jpg)
62
KB
Liste
nModellierungModellierung
mitErstem erstes ohneErstes
Stapel
+ create+ istLeer: boolean+ mitErstem(obj: Object)+ erstes: Object+ ohneErstes
![Page 63: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/63.jpg)
63
KB
Liste
nDruckerwarteschlangeDruckerwarteschlange
Druckauftragswarteschlange
![Page 64: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/64.jpg)
64
KB
Liste
nSchlangeSchlange
FIFO-Prinzip: first in, first out
mitLetztem erstes ohneErstes
![Page 65: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/65.jpg)
65
KB
Liste
nModellierungModellierung
mitLetztem erstes ohneErstes
Schlange
+ create+ istLeer: boolean+ mitLetztem(obj: Object)+ erstes: Object+ ohneErstes
![Page 66: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/66.jpg)
66
KB
Liste
nVereinfachungVereinfachung
Im folgenden sollen nur Stapel und Schlangen betrachtet werden, deren Elemente Zeichenketten sind.
Stapel
+ create+ istLeer: boolean+ mitErstem(s: String)+ erstes: String+ ohneErstes
Schlange
+ create+ istLeer: boolean+ mitLetztem (s: String)+ erstes: String+ ohneErstes
![Page 67: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/67.jpg)
67
KB
Liste
nImplementierungImplementierung
unit uStapel;interfaceuses classes {TStringList};type TStapel = class(TStringList) private public constructor create; function istLeer: boolean; procedure mitErstem(s: string); procedure ohneErstes; function erstes: string; end;implementation...
Stapel
+ create+ istLeer: boolean+ mitErstem(s: String)+ erstes: String+ ohneErstes
TStringList
+ Count: integer+ Strings: array[0..] of string
+ create+ delete(p: integer)+ insert(p: integer; s: String)...
![Page 68: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/68.jpg)
68
KB
Liste
nImplementierungImplementierung
constructor TStapel.create;begin inherited create; end;function TStapel.istLeer: boolean;begin result := (Count = 0); end;function TStapel.erstes: string;begin result := Strings[0]; end;procedure TStapel.ohneErstes;begin delete(0); end;procedure TStapel.mitErstem(s: string);begin insert(0,s); end;
Stapel
+ create+ istLeer: boolean+ mitErstem(s: String)+ erstes: String+ ohneErstes
TStringList
+ Count: integer+ Strings: array[0..] of string
+ create+ delete(p: integer)+ insert(p: integer; s: String)...
![Page 69: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/69.jpg)
69
KB
Liste
nAufgabeAufgabe
Implementieren Sie analog die Klasse Schlange. Benutzen Sie hierzu die vordefinierte Delphi-Klasse TStringList. Die benötigten Attribute (Properties) und Operationen sind im nebenstehenden Klassendiagramm aufgeführt. Die Bedeutung der Bestandteile kann mit der Delphi-Hilfe ermittelt werden.Erstellen Sie auch (einfache) Testprogramme, um die Korrektheit der Operationen zu überprüfen.
TStringList
+ Count: integer+ Strings: array[0..] of string
+ create+ delete(p: integer)+ insert(p: integer; s: String)...
Schlange
+ create+ istLeer: boolean+ mitLetztem (s: String)+ erstes: String+ ohneErstes
![Page 70: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/70.jpg)
70
KB
Liste
n
![Page 71: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/71.jpg)
71
KB
Liste
nTeil 4Teil 4
Anwendung: Taschenrechner
![Page 72: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/72.jpg)
72
KB
Liste
nAuftragAuftrag
Es soll ein Demo-Taschenrechner erstellt werden, der die Bearbeitung von Klammertermen veranschaulicht.Eingabe: ( 7 - 2 ) * 3 =
7
(
-
( 7
2
( 7 -
)
( 7 - 2
Verarbeitung:
Ergebnis: (7 - 2) * 3 = 15
![Page 73: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/73.jpg)
73
KB
Liste
nPflichtenheftPflichtenheft
/0/ Der Benutzer gibt die Bestandteile des Terms – auch Token genannt – Schritt für Schritt ein: Klammern, Zahlen, Rechenzeichen (+, -, *, :), Gleicheitszeichen. Z.B.: ( 7 - 2 ) * 3 =/1/ Die Bearbeitung des Terms wird Schritt für Schritt mit Hilfe eines Buttons ausgelöst. Die benutzten Stapel werden dabei jeweils auf dem Bildschirm angezeigt./2/ Der gesamte Term und das berechnete Ergebnis wird abschließend angezeigt.
![Page 74: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/74.jpg)
74
KB
Liste
nAuswertung von TermenAuswertung von Termen
Term: ( 7 - 2 ) * 3 =
7
(
-
( 7
2
( 7 -
)
*
5
3
* 5
( 7 - 2
=
* 5 3
15
![Page 75: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/75.jpg)
75
KB
Liste
nInterpreterInterpreter
) * 3 =
( -
7 2
termSchlangeoperandenStapeloperatorenStapel
Interpreter
'(7-2'
''
![Page 76: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/76.jpg)
76
KB
Liste
nOOMOOM
) * 3 =
( +
7 2
Interpreter
'(7-2)'
''
termSchlangeoperandenStapeloperatorenStapel
![Page 77: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/77.jpg)
77
KB
Liste
nAufgabeAufgabe
Fall 1: Das erste Element der TermSchlange ist ein Gleichheitszeichen und der OperatorenStapel ist nicht leer:
=
-
7
'7-2'
''
Ergänzen Sie den Interpretieralgorithmus.
2
![Page 78: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/78.jpg)
78
KB
Liste
nAufgabeAufgabe
Fall 2: Das erste Element der TermSchlange ist ein Gleichheitszeichen und der OperatorenStapel ist leer:
Ergänzen Sie den Interpretieralgorithmus.
=
5
'(7-2)'
''
![Page 79: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/79.jpg)
79
KB
Liste
nAufgabeAufgabe
Fall 3: Das erste Element der TermSchlange ist „Klammerauf“:
Ergänzen Sie den Interpretieralgorithmus.
( 7 - 2 ) =
''
''
![Page 80: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/80.jpg)
80
KB
Liste
nAufgabeAufgabe
Fall 4: Das erste Element der TermSchlange ist „Klammerzu“:
Ergänzen Sie den Interpretieralgorithmus.
) =
( -
7
'(7-2'
''
2
![Page 81: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/81.jpg)
81
KB
Liste
nAufgabeAufgabe
Fall 5: Das erste Element der TermSchlange ist ein Rechenzeichen:
Ergänzen Sie den Interpretieralgorithmus.
- 2 ) =
(
7
'(7'
''
![Page 82: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/82.jpg)
82
KB
Liste
nAufgabeAufgabe
Fall 6: Das erste Element der TermSchlange ist eine Zahl:
Ergänzen Sie den Interpretieralgorithmus.
2 ) =
( -
7
'(7-'
''
![Page 83: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/83.jpg)
83
KB
Liste
nAufgabeAufgabe
Implementieren Sie den Interpreter und testen Sie das Taschenrechner-Programm.Welche Erweiterungen wären wünschenswert?
![Page 84: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/84.jpg)
84
KB
Liste
nLösungLösung
Fall 1: Das erste Element der TermSchlange ist ein Gleichheitszeichen und der OperatorenStapel ist nicht leer:
=
-
7
'7-2'
''
2
hilf := termSchlange.erstes;termSchlange.ohneErstes;term := term + hilf;z1 := StrToInt(operandenStapel.erstes);operandenStapel.ohneErstes;z2 := StrToInt(operandenStapel.erstes);operandenStapel.ohneErstes;op := operatorenStapel.erstes;operatorenStapel.ohneErstes;if (op = '+') then erg := z2 + z1;if (op = '-') then erg := z2 - z1;if (op = '*') then erg := z2 * z1;if (op = ':') then erg := z2 div z1;ergebnis := IntToStr(erg);operandenStapel.mitErstem(ergebnis);
![Page 85: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/85.jpg)
85
KB
Liste
nLösungLösung
Fall 2: Das erste Element der TermSchlange ist ein Gleichheitszeichen und der OperatorenStapel ist leer:
=
5
'(7-2)'
''
hilf := termSchlange.erstes;termSchlange.ohneErstes;term := term + hilf;ergebnis := operandenStapel.erstes;
![Page 86: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/86.jpg)
86
KB
Liste
nLösungLösung
Fall 3: Das erste Element der TermSchlange ist „Klammerauf“:
( 7 - 2 ) =
''
''
hilf := termSchlange.erstes;termSchlange.ohneErstes;term := term + hilf;token := hilf;operatorenStapel.mitErstem(token);
![Page 87: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/87.jpg)
87
KB
Liste
nLösungLösung
Fall 4: Das erste Element der TermSchlange ist „Klammerzu“:
) =
( -
7
'(7-2'
''
2
hilf := termSchlange.erstes;termSchlange.ohneErstes;term := term + hilf;z1 := StrToInt(operandenStapel.erstes);operandenStapel.ohneErstes;z2 := StrToInt(operandenStapel.erstes);operandenStapel.ohneErstes;op := operatorenStapel.erstes;operatorenStapel.ohneErstes;operatorenStapel.ohneErstes;if (op = '+') then erg := z2 + z1;if (op = '-') then erg := z2 - z1;if (op = '*') then erg := z2 * z1;if (op = ':') then erg := z2 div z1;token := IntToStr(erg);operandenStapel.mitErstem(token);
![Page 88: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/88.jpg)
88
KB
Liste
nLösungLösung
Fall 5: Das erste Element der TermSchlange ist ein Rechenzeichen:
- 2 ) =
(
7
'(7'
''
hilf := termSchlange.erstes;termSchlange.ohneErstes;term := term + hilf;token := hilf;operatorenStapel.mitErstem(token);
![Page 89: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/89.jpg)
89
KB
Liste
nLösungLösung
Fall 6: Das erste Element der TermSchlange ist eine Zahl:
2 ) =
( -
7
'(7-'
''
hilf := termSchlange.erstes;termSchlange.ohneErstes;term := term + hilf;token := hilf;operandenStapel.mitErstem(token);
![Page 90: Listen](https://reader036.vdokument.com/reader036/viewer/2022062411/56815e7e550346895dcd097e/html5/thumbnails/90.jpg)
90
KB
Liste
nLiteraturhinweiseLiteraturhinweise
Helmut Balzert: Lehrbuch Grundlagen der Informatik. Spektrum Ak. Verlag 1999.H.-P. Gumm u. M. Sommer: Einführung in die Informatik. Oldenbourg Verlag 2002....