• Keine Ergebnisse gefunden

Invariante und Invariante und Algorithmenentwurf Algorithmenentwurf

N/A
N/A
Protected

Academic year: 2022

Aktie "Invariante und Invariante und Algorithmenentwurf Algorithmenentwurf"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Invariante und Invariante und

Algorithmenentwurf Algorithmenentwurf

Timm Grams Timm Grams Hochschule Fulda Hochschule Fulda

Fachbereich Elektrotechnik und Fachbereich Elektrotechnik und

Informationstechnik Informationstechnik

© Timm Grams, Fulda, 07.09.02 (6.5.07)

© Timm Grams, Fulda, 07.09.02 (6.5.07)

(2)

Einführung Einführung

Was dem Naturwissenschaftler die Naturgesetze, das Was dem Naturwissenschaftler die Naturgesetze, das sind dem Informatiker die Invarianten.

sind dem Informatiker die Invarianten.

Die Invariante erfasst den wesentlichen Kern eines Die Invariante erfasst den wesentlichen Kern eines Algorithmus, sie ist sein „Gesetz“.

Algorithmus, sie ist sein „Gesetz“.

Die Invariante ist Grundlage des Algorithmenent-wurfs.

Die Invariante ist Grundlage des Algorithmenent-wurfs.

Bei einem Algorithmus ist konsequent zu unterscheiden zwischen der Handlungsanweisung und der Invarianten.

Die Handlungsanweisung erfasst den dynamischen, die Invariante den statischen Aspekt eines Algorithmus.

(3)

Beispiel: Zahlenwandlung Beispiel: Zahlenwandlung

Wandlung der Dezimalzahl 202 in die Darstellung Wandlung der Dezimalzahl 202 in die Darstellung zur Basis 5

zur Basis 5 Stufe

Stufe k k Relation Relation

0 0 202 = 202 202 = 202   5 5

00

1 1 202 = 40 202 = 40   5 5

11

+ 2 + 2   5 5

00

2 2 202 = 8 202 = 8   5 5

22

+ 0 + 0   5 5

11

+ 2 + 2   5 5

00

3 3 202 = 1 202 = 1   5 5

33

+ 3 + 3   5 5

22

+ 0 + 0   5 5

11

+ 2 + 2   5 5

00

(4)

Zahlenwandlung

Zahlenwandlung

- Operatoren - Operatoren

Die Zahlenwandlung basiert auf der ganzzahligen Die Zahlenwandlung basiert auf der ganzzahligen Division mit Rest

Division mit Rest

Die dafür nötigen Operatoren in C sind / und % Die dafür nötigen Operatoren in C sind / und %

/ ist der Divisionsoperator / ist der Divisionsoperator

% ist der Modulo-Operator zur Bestimmung des Rests

% ist der Modulo-Operator zur Bestimmung des Rests

Beispiele: 202/5 = 40 und 202%5 = 2 Beispiele: 202/5 = 40 und 202%5 = 2

Fundamentale Formel der ganzzahligen Arithmetik:

Fundamentale Formel der ganzzahligen Arithmetik:

z z = = ( ( z z / / b b ) · ) · b b + + z z % % b b

(5)

Invariante und Endebedingung Invariante und Endebedingung

Die Invariante Die Invariante ist eine Aussage, die vor Eintritt in ist eine Aussage, die vor Eintritt in den Rechenschritt eines Algorithmus erfüllt ist, und den Rechenschritt eines Algorithmus erfüllt ist, und die nach dem Schritt erneut wahr ist.

die nach dem Schritt erneut wahr ist.

Der Algorithmus endet, wenn die

Der Algorithmus endet, wenn die Endebedingung Endebedingung erfüllt ist

erfüllt ist

(6)

Grundstruktur von Algorithmen in C Grundstruktur von Algorithmen in C

AA Initialisierungs-AnweisungenInitialisierungs-Anweisungen BB Schleifenbedingung.Schleifenbedingung.

Für B Für B 0 wird S 0 wird S ausgeführt,ausgeführt, für B für B = 0 (Endebedingung) = 0 (Endebedingung)

nicht nicht

SS Schleifenanweisung (meist Schleifenanweisung (meist eine Verbundanweisung) eine Verbundanweisung) II InvarianteInvariante

A A

while(

while( B B ) ) S S

I I ((B B 0)

I I ((B B =0)=0)

II II

B B

S S

A A

(7)

Beispiel: Wandlung der Zahl Beispiel: Wandlung der Zahl Z Z

in Darstellung zur Basis in Darstellung zur Basis B B

I I ((zz 0)

I I ((zz =0)=0)

II II

z z

r[k++]= z%b;

r[k++]= z%b;

z= z/b;

z= z/b;

k=0; k=0;

k=0; k=0;

while(

while(z z ){ ) {

r[k++]=z%b; r[k++]=z%b;

z=z/b; z=z/b;

} }

Invariante:

Invariante:

b = b = B B

Z Z = z = z   b b

kk

+r[k-1] +r[k-1]   b b

k-1k-1

+...+r[1] +...+r[1]   b b

11

+r[0] +r[0]   b b

00

0 ≤ r[

0 ≤ r[ i i ] < ] < B für i B für i < k < k

(8)

Programmbeweis

Programmbeweis mit der symbolischen Methode 1 mit der symbolischen Methode 1

Kursive Großbuchstaben bezeichnen mathematische Variable.

Kursive Großbuchstaben bezeichnen mathematische Variable.

Programmfragmente werden in Anführungszeichen geschrieben.

Programmfragmente werden in Anführungszeichen geschrieben.

Anfangs sei z=

Anfangs sei z=ZZ und durchweg gilt b= und durchweg gilt b B.B.

Zu zeigen ist zuerst, dass die Initialisierung Zu zeigen ist zuerst, dass die Initialisierung

„k=0;“„k=0;“

die Invariante wahr macht. Jedenfalls gilt nach der Initialisierung die Invariante wahr macht. Jedenfalls gilt nach der Initialisierung z=z=ZZ und k=0. Also: und k=0. Also:

ZZ = z= z

= z= zbb00

= z= bbkk + r[k-1] + r[k-1]bbk-1k-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00

 

(9)

Programmbeweis

Programmbeweis mit der symbolischen Methode 2 mit der symbolischen Methode 2

Im zweite Schritt ist zu zeigen, dass die Anweisungsfolge Im zweite Schritt ist zu zeigen, dass die Anweisungsfolge

„„r[k++]=z%b; z=z/b;“r[k++]=z%b; z=z/b;“

die Invariante erhält: Vor der Anweisungsfolge ist k=

die Invariante erhält: Vor der Anweisungsfolge ist k=KK und z= und z=AA. . Die Invariante wird zu

Die Invariante wird zu

ZZ = = AAbbKK+r[+r[KK-1]-1]bbK-1K-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00

Nach der Anweisungsfolge ist r[r[KK]=]=AA%b, k=%b, k=KK+1 und z=+1 und z=AA/b /b (ganzzahliger Quotient). Wegen

(ganzzahliger Quotient). Wegen AA=(=(AA/b)/b)b+b+AA%b gilt%b gilt ZZ = (= ((AA/b)/b)b+b+AA%b)%b bbKK+r[+r[KK-1]-1]bbK-1K-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00

= z= bbK+1K+1 +r[ +r[KK]]bbKK+r[+r[KK-1]-1]bbK-1K-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00

= z= bbkk + r[k-1] + r[k-1]bbk-1k-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00

 

(10)

Programmbeweis

Programmbeweis mit der symbolischen Methode 3 mit der symbolischen Methode 3

Im dritten und letzten Schritt ist zu zeigen, dass aus der Im dritten und letzten Schritt ist zu zeigen, dass aus der Bedingung

Bedingung I I  (z=0) das gewünschte Resultat folgt. (z=0) das gewünschte Resultat folgt.

In der Invarianten In der Invarianten

ZZ = z= bbkk + r[k-1] + r[k-1]bbk-1k-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00 ist z=0 zu setzen. Damit ergibt sich

ZZ = r[k-1]= r[k-1]bbk-1k-1+...+r[1]+...+r[1]bb11+r[0]+r[0]bb00

Das Array r enthält die Zahlendarstellung der Zahl Z zur Basis B.

 

(11)

Problem Problem

Für Für Z Z = 0 ist die Summe = 0 ist die Summe

r[k-1]

r[k-1]   b b

k-1k-1

+...+r[1] +...+r[1]   b b

11

+r[0] +r[0]   b b

00

leer. Das ist auch richtig so: Eine leere Summe hat leer. Das ist auch richtig so: Eine leere Summe hat konventionsgemäß den Wert null.

konventionsgemäß den Wert null.

Aber das Wandlungsprogramm kann mit einer leeren Aber das Wandlungsprogramm kann mit einer leeren Summe nichts anfangen.

Summe nichts anfangen.

Was ist zu tun?

Was ist zu tun?

Referenzen

ÄHNLICHE DOKUMENTE

Was ein solcher Boost bedeutet, macht man sich wie folgt klar: Der Ursprung von Σ 0 (d.h.. Drei Rotationen um und drei Boosts entlang der Raumachsen er- geben sechs unabh¨

Als ich das erste Mal auf dem Dampfwagen saß Ganze Periodenlänge...

Invariante Flächensummen.

I Für Iterationen wird eine Invariante benötigt (die nicht hergeleitet werden kann).?. Korrekte Software 33 [33]..

2 Invariante und negierte Schleifenbedingung muss Nachbedingung implizieren; ggf..

(4) Die Invariante ist leider unvollständig, so dass der Beweis nicht für alle Verifikationsbedingungen gelingt.. Welcher Teil der

§ Invariante und der Schleifen Test (wenn er wahr ist) müssen stark genug sein um zu zeigen, dass die Postcondition des Rumpfs auch die Invariante impliziert.. § Invariante und

Im Ergebnis lässt sich die Bricard-Bedingung folgendermaßen geometrisch- anschaulich interpretieren: Wenn sich alle Kugelzweiecke, die durch eine Zerlegung an den