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