Algorithmen und Programmierung II
|
SS 2004
|
Übungsblatt 12
|
Abgabe:
8.7.2004
|
Aufgabe
1 (5 Punkte)
Gesucht ist eine formale Spezifikation für die Methode
void rearrange(int low, int high)
in Anlehnung an das rearrange
aus 2.3.2, Seite 5/6. Voraussetzung und Effekt sollen in Haskell
formuliert werden.
Aufgabe 2 (6 Punkte)
Beweisen Sie:
final int a[] = new int[n];
int mitte, unten, oben, x; .....
{
a[unten]<x<a[oben] ∧ mitte=(unten+oben)/2 ∧ a[mitte]≠x ∧ ∀unten≤i<k≤oben a[i]<a[k] }
if (a[mitte]<x) unten = mitte;
else oben = mitte;
{ a[unten]≤x≤a[oben] }
Lässt sich die Voraussetzung abschwächen? Wenn ja,
geben Sie eine geeignete schwächere Voraussetzung an! Wenn
nein, warum nicht?
Aufgabe 3 (9 Punkte)
Die folgende Methode berechnet das Produkt zweier natürlicher
Zahlen mit der als „Ägyptische Multiplikation“ bekannten Technik:
/**
* pre: a>=b && b>=0
* post: result == A*B
*/
static int product(int a, int b) {
int p = 0;
while (b>0) {
if (b%2==1) p += a;
b = b>>1;
a = a<<1; }
return p;
}
a) (8 P.) Beweisen Sie die partielle Korrektheit unter
Verwendung der Schleifeninvariante
b>=0 && p+a*b == A*B
b) (1 P.) Beweisen Sie die totale Korrektheit!