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.
Als Initalanweisung genügt es, i mit <strong>der</strong> unteren Feldgrenze zu belegen und die Summe sum entsprechend<br />
auf item(i) zu setzen. Danach gilt die Invariante und die Variante ist nicht negativ.<br />
Init ≡ i:=p ; sum:=item(i).<br />
Als nächstes bestimmen wir die Abbruchbedingung <strong>der</strong> Schleife. Da Inv ∧Abbruch ⇒ post gelten<br />
muß, vergleichen wir die Invariante mit <strong>der</strong> Nachbedingung und kommen zu dem Schluß, daß i=q<br />
(o<strong>der</strong> auch i≥q) für diesen Zweck genügt.<br />
Abbruch ≡ i=q.<br />
Zum Schluß bestimmen wir die Schleifenanweisung. Diese muß die Variante verringern, um Terminierung<br />
zu erreichen, und die Invariante erhalten, um Korrektheit zu garantieren. Um die Variante zu<br />
verringern, müssen wir i erhöhen, weil wir p und q nicht än<strong>der</strong>n können. Der Schritt i:=i+1 alleine<br />
würde allerdings die Invariante zerstören. Um diese wie<strong>der</strong> herzustellen, müssen wir den Summenwert<br />
anpassen. Wegen i+1<br />
k=p ak = i k=p ak + ai+1 reicht es, ai+1 aufzuaddieren. Wir erhalten<br />
Anweisung ≡ i := i+1; sum := sum+item(i)<br />
und haben damit alle Komponenten <strong>der</strong> Schleife beisammen. Insgesamt ergibt sich also folgendes Programmstück<br />
zur Berechnung <strong>der</strong> Summe <strong>der</strong> Elemente einer Folge a von ganzen Zahlen.<br />
from i := p ;<br />
sum := item(i)<br />
until i = q<br />
loop<br />
i := i+1;<br />
sum := sum+item(i)<br />
end<br />
In diesem Beispiel wird das angestrebte Gleichgewicht zwischen Formalismus und Intuition beson<strong>der</strong>s deutlich.<br />
Vor- und Nachbedingung sowie Variante und Invariante wurden formal präzise beschrieben. Die Entwicklung<br />
<strong>der</strong> einzelnen Programmteile geschah dagegen weniger formal, orientierte sich aber an den durch die Verifikationsregel<br />
für Schleifen (Abbildung 4.11 auf Seite 161) vorgegebenen Randbedingungen.<br />
Darüber hinaus illustriert das Beispiel aber auch eine einfache Methode, um Schleifen zu entwickeln: die<br />
Abbruchbedingung sollte vor <strong>der</strong> Schleifenanweisung festgelegt werden und innerhalb <strong>der</strong> Schleifenanweisung<br />
sollte zunächst die Verringerung <strong>der</strong> Variante angestrebt werden. Diese Methodik haben wir auch schon bei<br />
<strong>der</strong> Berechnung <strong>der</strong> Fakultät mittels einer Schleife im Beispiel 4.3.9 auf Seite 156 angewandt.<br />
Entwurfsprinzip 4.5.12 (Strategie zur Erzeugung von Schleifen)<br />
Ein Programmstück sei spezifiziert durch eine Vorbedingung pre und die Nachbedingung post. Eine Verfeinerung<br />
dieses Programmstücks zu einer Schleife kann durch folgende Strategie erzielt werden.<br />
1. Ausgehend von einer groben Beweisidee lege die Invariante Inv und die Variante Var fest.<br />
2. Bestimme eine Initialanweisung Init , welche die Invariante erfüllt.<br />
3. Wähle eine Abbruchbedingung Abbruch, für die gilt Inv ∧Abbruch ⇒ post.<br />
4. Bestimme eine Schleifenanweisung Anweisung, welche die Variante verringert und die Invariante erhält.<br />
Die Verringerung <strong>der</strong> Variante sollte als erstes verfolgt werden.<br />
5. Erzeuge das Programm from Init until Abbruch loop Anweisung end<br />
Offen ist allerdings noch die Frage, wie denn die Invariante und die Variante aus einer vorgegebenen Problemstellung<br />
abgeleitet werden kann. Auch hier lohnt sich ein zielorientiertes Vorgehen.<br />
Da wir wissen, daß die Invariante zusammen mit <strong>der</strong> Abbruchbedingung die Nachbedingung implizieren muß,<br />
können wir die Invariante als eine Abschwächung <strong>der</strong> Nachbedingung ansehen. Wir werden also versuchen, die<br />
Nachbedingung so abzuschwächen, daß wir eine Invariante erhalten können. Hierzu gibt es eine Reihe von<br />
Möglichkeiten.