Huhu,
ich konnte mein Problem von gestern lösen, jedoch geht es nun mit großen Schritten auf die Klausur zu.
Eine Aufgabe, dieser Typ kam die letzten Jahre immer dran, verstehe ich noch nicht.
Es geht um die Bildung der Schleifeninvariante & Nachbedingung.
Um mal ein Klausurbeispiel zu geben, gegeben:
Die Aufgabe, auch immer identisch:
a) Welchen Wert berechnet diese Methode? Formulieren Sie eine entsprechende Nachbedingung R.
b) Geben Sie eine geeignete Schleifeninvariante Q an, mit deren Hilfe die partielle Korrektheit
der Methode bezüglich P und R nachgewiesen werden kann. Sie brauchen den Nachweis nicht zu führen.
c) Formulieren Sie Q und R als Java-Ausdrücke, sodass diese in den obigen assert-
Anweisungen verwendet werden können.
So. Nun stehe ich aber vor der Frage wie ich anfangen soll.
Ich schätze es ist auch am schlausten mit a anzufangen, also was berechnet die Methode.
i ist gesucht. i wird immer um 1 erhöht wenn s <= m ist und dabei s = s + n.
Das heißt doch, dass ich wissen muss wie oft diese while ausgeführt wird. Das kann man vielleicht in einer Summe ausdrücken. Also von s = 0 sum bis m+1 von n. Oder? Wie gehe ich vor? (auch bei den anderen Teilaufgaben habe ich keine Ahnung.
Hier noch eine andere Aufgabe dazu, vielleicht versteh ichs besser anhand von 2 Beispielen:
Vielen lieben Dank an alle die mir bisher so gut geholfen haben und helfen werden!
ich konnte mein Problem von gestern lösen, jedoch geht es nun mit großen Schritten auf die Klausur zu.
Eine Aufgabe, dieser Typ kam die letzten Jahre immer dran, verstehe ich noch nicht.
Es geht um die Bildung der Schleifeninvariante & Nachbedingung.
Um mal ein Klausurbeispiel zu geben, gegeben:
Java:
static int f(int m, int n) {
assert m>=0 && n>0; // Vorbedingung P
int s = 0,
i = 0;
assert ... // Schleifeninvariante Q
while ( s <= m ) {
s = s + n;
i = i + 1;
assert ... // Schleifeninvariante Q
}
i= i-1;
assert ... // Nachbedingung R
return i;
}
Die Aufgabe, auch immer identisch:
a) Welchen Wert berechnet diese Methode? Formulieren Sie eine entsprechende Nachbedingung R.
b) Geben Sie eine geeignete Schleifeninvariante Q an, mit deren Hilfe die partielle Korrektheit
der Methode bezüglich P und R nachgewiesen werden kann. Sie brauchen den Nachweis nicht zu führen.
c) Formulieren Sie Q und R als Java-Ausdrücke, sodass diese in den obigen assert-
Anweisungen verwendet werden können.
So. Nun stehe ich aber vor der Frage wie ich anfangen soll.
Ich schätze es ist auch am schlausten mit a anzufangen, also was berechnet die Methode.
i ist gesucht. i wird immer um 1 erhöht wenn s <= m ist und dabei s = s + n.
Das heißt doch, dass ich wissen muss wie oft diese while ausgeführt wird. Das kann man vielleicht in einer Summe ausdrücken. Also von s = 0 sum bis m+1 von n. Oder? Wie gehe ich vor? (auch bei den anderen Teilaufgaben habe ich keine Ahnung.
Hier noch eine andere Aufgabe dazu, vielleicht versteh ichs besser anhand von 2 Beispielen:
static int f(int n) {
assert n >= 1; // Vorbedingung P
int s = 1,
i = 0;
assert ...; // Schleifeninvariante Q
while (s < n) {
s = 2*s;
i = i + 1;
assert ...; // Schleifeninvariante Q
}
assert ...; // Nachbedingung R
return i;
}
assert n >= 1; // Vorbedingung P
int s = 1,
i = 0;
assert ...; // Schleifeninvariante Q
while (s < n) {
s = 2*s;
i = i + 1;
assert ...; // Schleifeninvariante Q
}
assert ...; // Nachbedingung R
return i;
}
Vielen lieben Dank an alle die mir bisher so gut geholfen haben und helfen werden!