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.

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!