Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
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.