Methoden Schleifeninvariante Assert Anweisungen

vaults

Mitglied
Moin Leute,

ich soll für folgende Methode, zu Beginn herausfinden was Sie berechnet, und dann geeignete Vorbdingung, Nachbedinung und Schleifeninvariante finden.

Hier ist die Methode:
Java:
public static int unknown(int x, int n){
		// Vorbedingung P
		int i, s;
		i = 0;
		s = x;
		// Schleifeninvariante Q
		while (i<n){
			i = i + 1;
			s = s + x + i;
			// Schleifeninvariante Q
		}
		// Nachbedingung R
		System.out.println("I ist: "+i+" S ist: "+s);
		return s;
	}

Das Problem ist, dass ich mir nicht klar ist, was diese Funktion mathematisch berechnet, grundsätzlich liefert Sie ja für alle Zahlen ein Ergebnis.

Die Vorbedingung P beschreibt die mathematischen bedingungen welche beim Aufruf der Methode erfüllt sein müssen.

Die Schleifeninvariante beschreibt die mathematische Zusammensetzung von (in diesem Falle) s

Die Nachbedingung überprüft das Ergebnis von s.

Ich habe mir nun als Vorbedingung, da er sonst in die Schleife nicht reingeht überlegt,
Java:
assert n > 0;			// Vorbedingung P
zu schreiben.

i wird pro Iterationsschritt lediglich einen hochgezählt, n-mal und erhät daher den Wert von n.
Die Nachbedingung sollte daher folgendes enthalten:
Java:
assert .... && i == n

Außerdem lässt sich s wie folgt berechnen:

s = (Summe von i=0 bis n für x) + (Summe von i=o bis n für i)
Tut mir leid, hab keinen Matheeditor gefunden.

Grundsätzlich sollte dies schon die Schleifeninvariante sein, bzw. die Nachbedingung R.
Allerdings weiß ich nicht wie ich dies schreiben soll.

Vielleicht gibt es ja jemanden der sich mit sowas gut auskennt und mir helfen kann, freue mich über jede Hilfe.

LG,
Alex
 
Zuletzt bearbeitet:
H

Hüte

Gast
Die Schleife wird n-mal ausgeführt

In der Schleife wird x+x+0 + x+1 + x+2 ... usw. berechnet

Die Invariante wäre dann x + (Sum i=0 bis n-1 von x+i), sie gilt vor, nach und in der Schleife
 

vaults

Mitglied
Moin,

danke für die Antwort, ich versuch deine Antwort noch mathematisch nachzuvollziehen, dann melde ich mich nochmal :D

Danke an dieser Stelle auch an Gauß für die Summenformel!

Die Nachbedingung R ist auf jeden Fall:
Java:
assert s == (n+1)*x + (i*(i+1))/2  && i == n;
 
H

Hüte

Gast
Ja, wenn du die Summenformel zerrupfst erhälst du
Code:
(i*(i+1))/2
. x ist ja unabhängig von der Zählervariable und kann desshalb außerhalb der Summe geschrieben werden. Die Invariante beeinflusst das aber nicht, sie bleibt die Summenformel
 

vaults

Mitglied
Moin,

danke nochmal, hier sind die fertigen Anweisungen:
Java:
public static int unknown(int x, int n){
		assert n > 0;			// Vorbedingung P
		int i, s;
		i = 0;
		s = x;
		assert s == x + (i*x) + (i*(i+1))/2;  	// Schleifeninvariante Q
		while (i<n){
			i = i + 1;
			s = s + x + i;
			assert s == x + (i*x) + (i*(i+1))/2;			// Schleifeninvariante Q
		}
		assert s == x+(i*x) + (i*(i+1))/2  && i == n;        // Nachbedingung R
		System.out.println("I ist: "+i+" S ist: "+s);
		return s;
	}

Einzig bei der Vorbedingung bin ich mir nicht sicher, die kann in diesem Fall meiner Meinung auch weggelassen werden.

LG,
Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Schleifeninvariante & Nachbedingung Java Basics - Anfänger-Themen 6
M Schleifeninvariante Java Basics - Anfänger-Themen 2
G Schleifeninvariante Java Basics - Anfänger-Themen 3
K Hoar-Kalkül,verifikation&schleifeninvariante? Java Basics - Anfänger-Themen 4
P JUnitTest Best Practise (Ein Assert pro Test?) Java Basics - Anfänger-Themen 10
P SimpleEntity und Assert, woher nehmen? Java Basics - Anfänger-Themen 8
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
B Break, Continue und Assert Java Basics - Anfänger-Themen 5
K Assert: Fehlerbedingung in String schreiben Java Basics - Anfänger-Themen 14
N Test mit assert Java Basics - Anfänger-Themen 9
A Assert statement Java Basics - Anfänger-Themen 3
S Assert Java Basics - Anfänger-Themen 14
B assert befehl in netbeans Java Basics - Anfänger-Themen 3
O Fragezeichenoperator assert expected Java Basics - Anfänger-Themen 7
L mit "assert" einen String prüfen Java Basics - Anfänger-Themen 5
D assert vor und nachbedingung Java Basics - Anfänger-Themen 9
E Assert Compilerfehler Java Basics - Anfänger-Themen 2
G Assert Java Basics - Anfänger-Themen 5
G Assert in eclipse oder wo/wie? Java Basics - Anfänger-Themen 3
S Sind unten stehende Anweisungen kompilierbar? Java Basics - Anfänger-Themen 7
M Java Anweisungen Java Basics - Anfänger-Themen 4
S Anweisungen verstehen System.out.print/println Java Basics - Anfänger-Themen 2
D Können if Anweisungen aufeinander aufbauen? Java Basics - Anfänger-Themen 1
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
P Java Verketten von Stream - Bedeutung der Anweisungen? Java Basics - Anfänger-Themen 3
J 2 "while"-Anweisungen in einer do-Schleife? Java Basics - Anfänger-Themen 4
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
S Erste Schritte Verkettung von Anweisungen Java Basics - Anfänger-Themen 4
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
R else if anweisungen Java Basics - Anfänger-Themen 2
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
? Klassen Verständnisprobleme mit Import Anweisungen Java Basics - Anfänger-Themen 6
L Frage zu If-Anweisungen Java Basics - Anfänger-Themen 3
OnDemand Package Anweisungen Java Basics - Anfänger-Themen 3
S Verständnisfrage zu Anweisungen und deren Wirkung Java Basics - Anfänger-Themen 7
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
B Anzahl if anweisungen nicht bekannt Java Basics - Anfänger-Themen 3
P if Anweisungen komprimieren Java Basics - Anfänger-Themen 6
G JTextField() Anzeige - if-Anweisungen Java Basics - Anfänger-Themen 2
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
R return Anweisungen und Array Elemente löschen Java Basics - Anfänger-Themen 6
C OOP if Anweisungen Java Basics - Anfänger-Themen 24
E If - Anweisungen Java Basics - Anfänger-Themen 4
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
G Exceptionfreie Anweisungen in try-catch-Blöcke, Java Basics - Anfänger-Themen 6
S Umsetzung von verschiedenen Anweisungen Java Basics - Anfänger-Themen 8
T Erstellen eines Steuerprogramms mittels if-anweisungen Java Basics - Anfänger-Themen 10
T Werden import Anweisungen nicht vererbt? Java Basics - Anfänger-Themen 3
M if-Anweisungen Java Basics - Anfänger-Themen 11
F Kann ein Problem bei Anweisungen nicht lösen Java Basics - Anfänger-Themen 4
J Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 13
B variable deklaration und wert speichern in 2 anweisungen? Java Basics - Anfänger-Themen 20
T Import-Anweisungen Java Basics - Anfänger-Themen 10
D Anweisungen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben