Universität Paderborn Institut für Informatik Prof. Dr. Hans Kleine Büning Paderborn, 15. Januar 2010 Abgabe: 25. Januar 2010, 11:15h Übungen zur Vorlesung Modellierung WS 2009/2010 Blatt 12 Organisatorisches: Die Lösungen der Übungsaufgaben sind in die Kästen im D3-Flur einzuwerfen. Bilden Sie bitte innerhalb ihrer Übungsgruppe Gruppen von 2-3 Personen zur Lösung der Aufgaben. Die Lösung muss die Namen und Matrikelnummern derjenigen enthalten, die die Aufgaben gelöst haben sowie die Übungsgruppennummer. Aufgabe 40 (6 Punkte): Verifikation von Zuweisungen und bedingten Anweisungen Ermitteln Sie bei den folgenden Verifikationsschritten jeweils die fehlende Vor- bzw. Nachbedingung bezüglich der vorgegebenen Anweisungssequenz. Geben Sie in ihrer Lösung alle Zwischenschritte und die verwendeten Regeln an. (a) Vorbedingung: {. . . } a := a − 2; Nachbedingung: {a > 5} (b) Vorbedingung: {. . . } u := u + 3; v := u − 2 ∗ w; Nachbedingung: {u > 3 und v > 1 3 · u} (c) Vorbedingung: {a, b ∈ Z und a + 1 > 0} if (b < 0) then a := (−4) ∗ b; else a := 4 ∗ b; Nachbedingung: {. . . } Aufgabe 41 (12 Punkte): Korrektheit von Vor- und Nachbedingungen Überprüfen Sie die Verifikation durch Einfügen von Zwischenschritten auf ihre Korrektheit. 1 2010 (a) Vorbedingung: {a = b2 } a := a + 2 ∗ b + 1; b := b + 1; Nachbedingung: {a = (b + 1)2 } (b) Vorbedingung: {a = b3 } a := a − 3 ∗ b ∗ b + 3 ∗ b − 1; b := b − 1; Nachbedingung: {a = b3 } (c) Vorbedingung: {. . . } x := x + 3; y := x − 2 ∗ z; Nachbedingung: {x > 3 und 3y > x} (d) Vorbedingung: {a · b ≥ 0} if (a > b) then begin x := a − b; b := b − a; a := x; end else a := b; Nachbedingung: {a · b < 0} (e) Vorbedingung: {x ≥ 0} if (a > 0) then x := 2 ∗ a; else x := (−2) ∗ a; Nachbedingung: {x ≥ 0} Aufgabe 42 (11 Punkte): Verifikation von bedingten Anweisungen Gegeben ist folgender Programmfragment, zur Berechnung des Minimum von drei Zahlen a, b, c. Überprüfen sie den Algorithmus mit Hilfe der Regeln der Hoareschen Logik auf Korrektheit und korrigieren sie eventuell gefundene Fehler. Sollten sie Fehler im Pseudocode korrigiert haben, so zeigen sie mit Hilfe der Regeln der Hoareschen Logik, dass ihr Pseudocode nun das gewünschte Resultat liefert. 2 2010 Vorbedingung: {a ∈ R und b ∈ R und c ∈ R} begin if (a < b) then if (c < a) then x := c; else x := b; else if (c < b) then x := c; else x := a; end Nachbedingung: {a ∈ R und b ∈ R und c ∈ R und x ≤ a und x ≤ b und x ≤ c} 3 2010