Datenabstraktion

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading
Zur Übersicht

Die folgenden Aufgaben beziehen sich direkt auf die in der Vorlesung verwendete Linienführung und die vorgestellten Beispiele. In dieser Übung werden Sie unter anderem den ADT Stack implementieren.

Inhaltsverzeichnis

Get Type

Schreiben Sie eine Prozedur get-type, die das Typ-Kennzeichen des übergebenen Wertes als Symbol zurückgibt, und wenden Sie sie auf einige Beispiele an.

Stack

Schreiben Sie für alle in der Signatur des ADT stack angegebenen Operationen die entsprechenden Schemeprozeduren unter Verwendung von Scheme-Listen. Stellen Sie sicher, dass die im Skript genannten Axiome eingehalten werden!

Hinweis: Beachten Sie bei der Implementation das 4-Stufen-Modell!!!

Stufen

1. Stufe: Es stehen alle (eingebauten) Scheme-Sprachelemente (Konstruktoren, Selektoren, Prädikate) für Listen zur Verfügung.

2. Stufe:

3. Stufe:

4. Stufe:

Vektor

Ändern Sie nun Ihre Implementation des ADT stack so, dass sie statt Listen Vektoren verwendet. Stellen Sie sicher, dass die Funktionalität des ADT unverändert bleibt.

Führen Sie die Veränderungen in den obigen Code-Bereichen durch.

Hinweis: Wenn Sie das 4-Stufen-Modell korrekt angewandt haben, sollten keinerlei Änderungen der Prozeduren auf Stufe 3 und 4 vorgenommen worden sein.


Generische Operationen

add

Schreiben Sie eine generische Operation add, die je nach Typ der Parameter das Entsprechende leistet. Die möglichen Parametertypen sollen Zahlen, Punkte im 3-dimensionalen Raum sowie Zeichenketten sein. Die Prozedur soll mit explizit etikettierten Daten arbeiten (siehe Kaptiel 6.1, Daten mit Typetikett)! Erproben Sie die Prozedur mit geeigneten Werten.

Aufrufbeispiel:

> (define zahl1 (put-type 'number 4))
> (define zahl2 (put-type 'number 9))
> (add zahl1 zahl2)
13

Typ Operator Tabelle

Erweitern Sie die Typ-Operator-Tabelle aus Kapitel 6.5 so, dass die Operationen add und minus auch für Punkte im zweidimensionalen Raum anwendbar sind. Dies hat den praktischen Vorteil, dass sämtliche Anwendungsprozeduren, die mit Punkten arbeiten, unverändert übernommen werden können.

distance-to

Ergänzen Sie distance-to in point-maker (siehe Kapitel 6.6, Message Passing). Sendet man distance-to mit einem Punkt p-base an einen beliebigen Punkt p, so soll der Abstand zwischen p und p-base zurückgegeben werden. Vergessen Sie nicht, vor der Erprobung zwei Punkte mit der dann erweiterten Prozedur point-maker zu definieren.

Hinweis: Der oben definierte Punkt p1 kann nicht genommen werden, da er die Operation distance-to nicht versteht.

Aufrufbeispiel:

> (define p1 (point-maker 2 38 3))
> (p1 'distance-to (point-maker 4 23 -2))
15.937377450509228

Zur Übersicht

Persönliche Werkzeuge