22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Dieser Beweis ist in <strong>der</strong> folgenden Form zu lesen:<br />

Man beginnt grundsätzlich mit <strong>der</strong> Nachbedingung des Programmstücks (24). Entsprechend <strong>der</strong> Verifikationsregel<br />

für bedingte Anweisungen ist diese Nachbedingung auch die Nachbedingung <strong>der</strong> einzelnen<br />

Zweige (13) und (22).<br />

Betrachten wir nun den else-Zweig, dann ergibt uns die Prädikatentransformation durch korrekt:=<br />

false die Zusicherung (20). Diese ist – wegen <strong>der</strong> angegebenen Konversionsregeln aus Abbildung 2.9<br />

(Seite 39) äquivalent zu (19), (18) und (17) und wird mit den Ableitungsregeln aus Abbildung 2.10 41)<br />

auf (16) verstärkt. (16) ist die von <strong>der</strong> if-Regel verlangte Vorbedingung.<br />

Genauso erfolgt <strong>der</strong> Beweis des then-Zweigs. Über die Prädikatentransformer und Konversionsregeln<br />

erhält man aus (13) die Zusicherung (3), die on <strong>der</strong> if-Regel verlangte Vorbedingung.<br />

Damit haben wir die Prämissen <strong>der</strong> if-Regel erfüllt und können daraus schließen, daß true die Vorbedingung<br />

von korrekt ⇒ Result=arg! ist.<br />

4.3.5 Wie<strong>der</strong>holung<br />

Routinen, die wir mit den bisher vorgestellten Mechanismen aufbauen können, lohnen sich kaum zu programmieren,<br />

da <strong>der</strong> komplette Berechnungsablauf durch einzelne Anweisungen beschrieben werden muß. Ein<br />

wirklicher Gewinn entsteht erst dadurch, wenn wir Berechnungen mehrfach ausführen können, ohne sie immer<br />

wie<strong>der</strong> hinschreiben zu müssen. Diese Möglichkeit <strong>der</strong> Wie<strong>der</strong>holung von Anweisungen bietet die Schleife. 27<br />

Betrachten wir dazu erneut unser Bibliothekenverwaltungsprogramm. Das Menü, mit dem ein Benutzer zu<br />

Beginn <strong>der</strong> Bearbeitung eine Transaktionsart auswählen kann, sollte sinnvollerweise nach <strong>der</strong> Abarbeitung <strong>der</strong><br />

Transaktion erneut auf dem Bildschirm erscheinen, bis <strong>der</strong> Benutzer schließlich eine Beendigung <strong>der</strong> Sitzung<br />

auslöst. Dieses Verhalten können wir (als Teil <strong>der</strong> Initialisierungsprozedur von BIB VERWALT) erzielen, wenn<br />

wir unser Programmstück von Seite 154 wie folgt erweitern.<br />

from sitzung beenden := false<br />

until sitzung beenden = true<br />

loop -- Interaktionsmenü verarbeiten<br />

inspect benutzerantwort im interaktionsmenü<br />

when Ausleihe then !AUSLEIHE!transakt.init(home bibliothek)<br />

when Verlängern then !VERLÄNGERN!transakt.init(home bibliothek)<br />

when Rückgabe then !RÜCKGABE!transakt.init(home bibliothek)<br />

when Entnahme then !ENTNAHME!transakt.init(home bibliothek)<br />

when Hinzufügen then !HINZUFÜGEN!transakt.init(home bibliothek)<br />

else sitzung beenden := true<br />

end<br />

end<br />

Dieses Programmstück besagt, daß die Verarbeitung des Interaktionsmenüs mittels Fallunterscheidung (die<br />

Anweisungen zwischen loop und end) solange wie<strong>der</strong>holt werden soll, bis sitzung beenden=true erfüllt<br />

ist. Dabei wird zu Beginn <strong>der</strong> Schleife – vor dem ersten Test sitzung beenden=true – die Anweisung<br />

sitzung beenden:=false ausgeführt.<br />

Diese Schleifenkonstruktion von Eiffel ist eine Mischung aus Wie<strong>der</strong>holungs- und Zählschleifen, die in an<strong>der</strong>en<br />

Programmiersprachen oft getrennt auftreten. Die Begründung hierfür ist <strong>der</strong> Wunsch, die Sprache möglichst<br />

einfach zu halten. Die allgemeine Form einer Eiffel-Schleife ist daher die folgende<br />

from Initialanweisung<br />

until Abbruchbedingung<br />

loop Schleifenanweisung<br />

end<br />

27 Den gleichen Effekt kann man natürlich auch durch einen rekursiven Aufruf von Routinen erzielen, was eleganter, für<br />

Nichtmathematiker aber meist viel unüberschaubarer ist als eine Schleife.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!