WS 97/98: Algorithmen und Programmierung III - Übungsblatt 4
Abgabe bis 13.11., 12 Uhr
Aufgabe 4.1 (6 Punkte)
Gib dem Definitionsmodul aus Aufgabe 3.1 den Namen Flüge
und entwickle dazu ein passendes Implementierungsmodul. Wichtig ist
hierbei vor allem die Angabe der Invariante, der Abstraktion und der
Voraussetzungen/Effekte der Prozeduren.
Aufgabe 4.2 (4 Punkte)
Beweise, daß die Repräsentation aus 4.1 sowie die Voraussetzungen und
Effekte korrekt gewählt sind!
Aufgabe 4.3 (4 Punkte)
Ein Flugbuchungssystem identifiziert die verwalteten Flüge über
Flugnummern wie z.B. LH4711. Wenn man eine entsprechende Flugverwaltung
und -buchung in Miranda nachbilden will, kann man den aktuellen Zustand
des Systems durch einen abstrakten Wert vom folgenden Typ ausdrücken:
abstype flights
with flightlist :: flights || eine Liste von Flügen
reserve :: string -> flights -> (flights,num) || Buchung mit Ablieferung einer Sitznummer
cancel :: string -> num -> flights -> flights || Löschen einer Buchung
full :: string -> flights -> bool || ist der Flug ausgebucht?
flights == [(string,flight)]
flightlist = [("LH4711", emptyflight),
("UA337" , emptyflight),
.....]
reserve .....
flight ist ein ADT ähnlich dem flug aus Aufgabe 3.2,
mit geeigneten Operationen, die es erlauben, die oben postulierten
Operationen für flights zu realisieren.
Vervollständige die Implementierung von flights!
Könnte eine Invariante für flights sinnvoll sein, und - wenn ja - welche?
Wann sind die obigen Operationen nicht definiert, und wie verhält sich
das Programm in diesen Fällen?
[Aufgabe 4.4 wahlweise]
Zum Testen von flights wäre es schön, wenn man wie mit einem
Flugbuchungssystem interaktiv arbeiten könnte. Dafür muß ein Testrahmen
entwickelt werden, der die Folge der Eingaben als Liste verarbeitet und
eine passende Liste von Ausgaben erzeugt. (ALP I!)
3.11.1997