Terminierung einer Schleife < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 02:59 So 13.05.2012 | Autor: | halonol |
Aufgabe | Weisen Sie mit der auf Vorlesungsfolie 49 beschriebenen Methode nach, dass die while-Schleife im folgenden Programmabschnitt terminiert. Halten Sie sich dabei exakt an das auf der Folie beschriebene Verfahren: Geben Sie zunächst an, wie ui aus den Werten der Variablen a und b zu berechnen ist. Begründen Sie dann für jeden der Punkte 1 bis 3 der Folie kurz, warum er zutrifft.
// Es gilt n > 0:
int a = 2;
int b = n;
while(a < b + 10) {
a = a * 2;
b = b + 1;
} |
Man soll zu den "Iterationen 0,1,... eine Folge von Werten u 0, u1, u2 ..., die sich jeweils nach einer
festen Formel aus den Werten von Programmvariablen ergeben, konstruieren, und zwar für u0 bei Eintritt in die Schleife und für ui am Ende der i-ten Iteration (for: nach Inkrement)
Zum Beweis der Terminierung genügt dann nachzuweisen, dass:
1. u0 > 0
2. [mm] u_i+1 [/mm] < [mm] u_i [/mm] - d für alle i und einen festen Wert d > 0
3. Für ui ≤ 0 wird die Schleife nach der i-ten Iteration verlassen".
Ich habe mir als Folge u=b-a+2 gewählt.
Für [mm] u_0 [/mm] gilt dann:
[mm] u_0=n-2+2=n>0. [/mm] Also ist die erste Bedingung erfüllt.
Zur zweiten Bedingung:
2.
[mm] u_i=b-a+2=n-a+2
[/mm]
[mm] u_i+1=b+1-2a+2=n-2a+3
[/mm]
Vergleicht man dies, muss man ja nur -a+2 und -2a+3 vergleichen.
Da a>=2 ist, gilt natürlich -a+2<-2a+3. Im Gesamten folgt also die zweite Bedingung.
3. Punkt 3 habe ich allerdings Schwierigkeiten zu beweisen.
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
http://www.java-forum.org/java-basics-anfaenger-themen/136180-terminierung-schleifen.html#post898030
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 03:20 Di 15.05.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|