22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

from Init invariant Inv variant Var until Abbruch loop Anweisung end<br />

nie<strong>der</strong>zuschreiben, weil dies die Verwendung <strong>der</strong> Verifikationsregel erheblich erleichtert. Abbildung 4.11 faßt<br />

alle Komponenten dieser Regel zusammen.<br />

{ pre} Init { Inv ∧ Var≥0} ,<br />

{ Inv ∧ ¬Abbruch ∧ Var≥0 ∧ Var=x} Anweisung { Inv ∧ Var≥0 ∧ Var0} fakultäts-berechnung { Result=arg!}<br />

Result=arg! ist die gewünschte Nachbedingung. Sie muß nun mithilfe von Wissen über die Ordnung<br />

<strong>der</strong> natürlichen Zahlen an die Form Inv ∧ Abbruch, also die Nachbedingungsform <strong>der</strong> Schleife, angepaßt<br />

werden. Dabei geht natürlich schon eine gewisse Vorstellung über die vorgesehene Berechnung <strong>der</strong><br />

Fakultät mit ein, nämlich daß wir die Fakultät durch eine schrittweise Annäherung <strong>der</strong> Eingabe arg<br />

durch eine Zahl n von unten bestimmen und versuchen, in jedem Durchlauf die Eigenschaft Result=n!<br />

zu garantieren. Für n=arg ist dann Result=arg!. Wir spalten nun noch n=arg auf in n≤arg ∧ n≥arg,<br />

um eine mögliche Abbruchbedingung für die Annäherung von unten zu beschreiben und erhalten als<br />

äquivalente Beschreibung für die gewünschte Nachbedingung<br />

Result=arg! ≡ Result=n! ∧ n≤arg ∧ n≥arg<br />

Dies ist <strong>der</strong> eigentlich kreative Anteil an <strong>der</strong> Programmentwicklung. Die Abbruchsbedingung n≥arg<br />

und die Invariante Result=n! ∧ n≤arg sind somit festgelegt und müssen nun bei <strong>der</strong> weiteren Entwicklung<br />

eingehalten werden. Gemäß <strong>der</strong> Verifikationsregel für Schleifen müssen wir nun noch eine<br />

Initialanweisung Init festlegen mit <strong>der</strong> Eigenschaft<br />

{ arg>0} Init { Result=n! ∧ n≤arg}<br />

und eine Schleifenanweisung Anweisung mit<br />

{ Result=n! ∧ n≤arg ∧ ¬(n≥arg)} Anweisung { Result=n! ∧ n≤arg}<br />

o<strong>der</strong> vereinfacht<br />

{ Result=n! ∧ n

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!