WS 97/98: Algorithmen und Programmierung III - Übungsblatt 3
Abgabe bis 6.11., 12 Uhr
Aufgabe 3.1 (5 Punkte)
Für ein Flugbuchungssystem werde ein abstrakter Datentyp Flug benötigt.
Auf Flug-Objekten braucht man Operationen wie buchen, löschen,
ausgebucht u.ä., für die Erzeugung eines Objekts eine Operation
neuerFlug. Das Flugbuchungssystem könnte folgende Code-Fragmente
enthalten:
VAR f: Flug;
BEGIN ...
ok := buchen(platz, f);
...
voll := ausgebucht(f);
...
Entwirf einen sinnvollen Satz von Operationen und fasse sie samt
einer sorgfältig formulierten umgangssprachlichen Spezifikation
in einem Definitionsmodul zusammen! (Dabei gibt es beträchtliche
Freiheitsgrade, sowohl bei den Operationen als auch bei deren
Parametrisierung. Beim obigen buchen beispielsweise könnte
man sich den ersten Parameter als Variablenparameter vorstellen,
über den man einen bestimmten Platz wünschen kann und, wenn dieser
nicht verfügbar ist, vom System einen "ähnlichen" Platz erhält.
Es sind aber natürlich auch andere Varianten denkbar.)
Wenn eine Operation nicht erfolgreich ausgeführt werden kann
(z.B. buchen wenn alles ausgebucht ist), soll sie keinen Effekt
haben und lediglich - als Boole'sche Funktionsprozedur formuliert - ein
FALSE abliefern (andernfalls TRUE).
Aufgabe 3.2 (6 Punkte)
a) Verfasse eine Signatur für einen abstrakten Datentyp flug
- entsprechend dem Flug aus Aufgabe 3.1 - in Miranda!
Die Signatur soll ähnlich dokumentiert werden wie das Definitionsmodul.
Anders als bei Aufgabe 3.1 sollen die Fehlermöglichkeiten
nicht in der Signatur berücksichtigt werden.
b) Wähle für flug eine geeignete Repräsentation und gib eine dazu
passende Implementierung an! Zu beachten ist, daß nicht alle Funktionen
total sind. Wird versucht, einen nicht definierten Funktionswert zu
berechnen, soll das Programm mit einer aussagekräftigen Fehlermeldung
abbrechen.
c) flug ist geeignet zu testen.
26.10.1997