Was tut diese Methode? und wie müssen die assertions aussehen?

ocsme

Top Contributor
Guten Tag zusammen,

die Aufgabenstellung
- Welchen Wert berechnet diese Methode?
- Für Q und R geeignete assert-Anweisungen angeben

Java:
    static int f(int m, int n) {
        assert m <= n; //Vorbedingung P
        int s = m+n;
        int    i = m;
        // assert     //Schleifeninvariante Q
        while(i <= n) {
            s = s -2*i;
            i = i+1;
        //assert     //Schleifeninvariante Q
        }
        //assert    //Nachbedingung R
        return s;
    }

Wenn m = n ist dann kommt immer 0 raus!
Wenn m < n kommt es drauf an. Für n = 12
m = 0: 12*12 = -144
m = 1: 13*11 = -143
m = 2: 14*10 = -140
m = 3: 15*9 = - 135

und so weiter!!! m+1,n-1
Welcher Wert soll das nun aber sein?

LG
 
X

Xyz1

Gast
Q = s - 2*(m)-2*(m-1)-2(m-2)-...-2(m-n) müsste die Invariante sein,
statt s setze auch (m+n),
Q = (m+n) - 2*(m)-2*(m-1)-2(m-2)-...-2(m-n),
und das wäre dann, wenn mich nicht alles täuscht...:
Q = n - (m)-2*(m-1)-2(m-2)-...-2(m-n).
 

ocsme

Top Contributor
Komisch ich bin nicht Benachrichtigt worden das du geantwortet hast auf die Frage :(
Ist das ganze wirklich so Kompliziert :D ???
Was berechnet die Funktion jetzt die Sattelfläche?
 

httpdigest

Top Contributor
Java:
s == m + n - 2 * (n * (n + 1) / 2 - (m - 1) * m / 2) // <- https://en.wikipedia.org/wiki/1_%2B_2_%2B_3_%2B_4_%2B_%E2%8B%AF']https://en.wikipedia.org/wiki/1_+_2_+_3_+_4_+_⋯
s == m + n - (n * (n + 1) - (m - 1) * m)
s == m + n - (n*n + n - m*m + m)
s == (m - n) * (m + n)
 

httpdigest

Top Contributor
Noch etwas zur Erklärung meiner obigen Herangehensweise:
Die Idee ist, dass die Schleife ja effektiv eine Summe berechnet, die von `s` abgezogen wird. Wenn wir mal das `2 *` und die Subtraktion ausklammern, dann wird in der Schleife einfach die Summe von `m+(m+1)+(m+2)+(m+3)+...(m+n-m)` berechnet. Der nächste Schritt ist, dass wir diese Summe nun in zwei Teilsummen ausdrücken. Bei der Summe der `m`s sehen wir, dass das nichts anderes ist als `m` Mal die Anzahl der `m`s, welches (n-m+1) ist. Also: `(n-m+1)*m` und `1+2+3+4+..+(n-m)`.
Nun sollte bekannt sein, dass die Folge `1+2+3+4+5+..+N` über die Gaußsche Summenformel: `N * (N + 1) / 2` ausgedrückt werden kann.
Das heißt, eingesetzt in die Summenformel ergibt sich insgesamt:
`(n-m+1)*m + (n-m+1)*(n-m)/2`.
Nun kommt noch das `2 *` und die Subtraktion hinzu:
`-2 * ((n-m+1)*m + (n-m+1)*(n-m)/2)`.
Das ist die Summe, die effektiv von `s` innerhalb der Schleife abgezogen wird.
Da `s` vorher ja `m+n` war, ist `s` nachher insgesamt:
`m+n - 2 * ((n-m+1)*m + (n-m+1)*(n-m)/2)`.
Und das kann man schlussendlich mit der dritten binomischen Formel vereinfachen.
 

httpdigest

Top Contributor
Hier noch "the last mile" bis zur Vereinfachung des gesamten Terms:

Ausgang:
`m + n - 2 * ((n - m + 1) * m + (n - m + 1) * (n - m) / 2)`

`2* und /2` im letzten Summanden ausmultiplizieren:
`m + n - 2 * (n - m + 1) * m - (n - m + 1) * (n - m)`

`(n - m + 1)` ausfaktorisieren:
`m + n - (n - m + 1) * (2 * m + (n - m))`

letzten Faktor vereinfachen:
`m + n - (n - m + 1) * (m + n)`

`+1` in Multiplikation durch Addition von `(m+n)` ersetzen:
`m + n - (n - m) * (m + n) - (m + n)`

`erstes m+n und letztes -(m+n)` heben sich auf:
`-(n - m) * (m + n)`

Negation in die Summe hineinmultiplizieren:
`(m - n) * (m + n)`
 

mihe7

Top Contributor
Die Invariante lautet IMO:
gif.latex
 
X

Xyz1

Gast
@mihe7 Ja das ist das was ich auch geschrieben hatte, nur Du hast es in der Summenschreibweise

Die Summe geht nicht hoch bis n, sondern nur bis i ;)

Die Nachbedingung R wäre einfach m²-n²
 

ocsme

Top Contributor
Vielen Lieben Dank :)
Hab es nun verstanden :)
Leider muss ich Schreckens fest stellen das vieles aus Mathe wieder abhanden gekommen ist!!! Also muss ich dort später wieder auffrischen :)
 
X

Xyz1

Gast
Naja, diese Invariante hatte jetzt nicht den mathematisch höchsten Anspruch...

@httpdigest Wenn ich mich nicht täuschen, so hätte man auch mit dem kleinen Gauß (also die gaußsche Summenformel) darauf kommen können.
 

mihe7

Top Contributor
@mihe7 Ja das ist das was ich auch geschrieben hatte, nur Du hast es in der Summenschreibweise

Die Summe geht nicht hoch bis n, sondern nur bis i ;)
Und das ist IMO falsch: die Summe der Invariante darf nur bis i-1 gehen, außerdem gehört zur Invariante die Bedingung i<=n. Durch die Abbruchbedingung wird daraus i=n+1, so dass die Summe in s dann tatsächlich von m bis einschließlich n geht.
 

mihe7

Top Contributor
Du hast z. T. Recht: die Schleifenbedingung ist nicht Teil der Invariante. Ansonsten muss die Invariante vor der Schleife, am Anfang und am Ende jedes Schleifendurchlaufs sowie nach der Schleife gelten. Nach der Schleife gilt aber i = n+1, so dass die in der Invarianten die Summe nur bis i-1 gebildet werden darf.

jetzt Spiel Dich nicht so auf... schlägt die Hitze schon auf den Kopf?
Das liegt durchaus im Bereich des Möglichen :)
 
X

Xyz1

Gast
Das liegt durchaus im Bereich des Möglichen
Bei mir sind die 32 Grad auch schon überschritten, danach schaltet mein Gehirn in so eine Art Stand-by um :D

Aber... seid gewarnt (und gut darauf vorbereitet)... Donnerstag voraussichtlich teils bis zu 40 Grad. Die heiße Luft kommt aus Spanien/Portugal herüber und trifft der Vorhersage sogar Holland....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
J Womit kann ich diese Methode testen? Java Basics - Anfänger-Themen 5
N Methoden warum wird diese Methode aufgerufen Java Basics - Anfänger-Themen 9
B Wie würdet ihr diese Methode erklären? Java Basics - Anfänger-Themen 2
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
B Was macht diese Methode? Java Basics - Anfänger-Themen 9
P Was macht diese methode Java Basics - Anfänger-Themen 2
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
H Was macht diese Methode? Java Basics - Anfänger-Themen 3
J Warum muss diese Methode static sein ?! Java Basics - Anfänger-Themen 7
H Warum funktioniert diese kleine Methode nicht? Java Basics - Anfänger-Themen 8
P ich versteh diese Methode nicht ;? Java Basics - Anfänger-Themen 7
W Bindung bzw warum wird diese Methode aufgerufen? Java Basics - Anfänger-Themen 5
K Warum funktioniert diese Methode nicht? Java Basics - Anfänger-Themen 20
S Ich verstehe diese Methode nicht! Java Basics - Anfänger-Themen 6
C Wie kann ich diese Methode aufrufen? Java Basics - Anfänger-Themen 2
M Warum wird diese Methode ausgeführt? Java Basics - Anfänger-Themen 2
M Wie diese Methode schreiben? Java Basics - Anfänger-Themen 8
P Wie kann diese Schleife beenden Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
M Wie kommen diese Ausgaben zustande? Java Basics - Anfänger-Themen 12
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
Alen123 Wie würdet ihr diese Aufgabenstellung lösen? Java Basics - Anfänger-Themen 18
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
G Woher kommt diese Eigenschaft Java Basics - Anfänger-Themen 5
F Wie implementiere ich diese Aufgabenstellung? Java Basics - Anfänger-Themen 16
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
F Warum erhalte ich diese Fehler bei der Einbindung von SQLite JDBC in Eclipse? Java Basics - Anfänger-Themen 1
F Warum verläuft DIESE Schleife endlos? Java Basics - Anfänger-Themen 4
D Was bedeutet diese Schreibweise? Java Basics - Anfänger-Themen 9
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
W Wie vermerke ich diese Struktogramm Passage in Java Syntax? Java Basics - Anfänger-Themen 8
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Wie könnte man mit Java diese Matheaufgabe lösen Java Basics - Anfänger-Themen 7
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
P Terminieren diese Schleifen Java Basics - Anfänger-Themen 6
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
G Vertsändnisfrage zu Code - Wie kommt diese Ausgabe zustande? Java Basics - Anfänger-Themen 2
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
H Wie erstelle ich diese Klassen? Java Basics - Anfänger-Themen 44
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
M Erste Schritte Wie kommt man auf diese Ausgabe? Java Basics - Anfänger-Themen 3
F verstehe diese Variable nicht... Java Basics - Anfänger-Themen 4
B for-schleife - Was tut diese? Java Basics - Anfänger-Themen 11
A Wie kommt diese NullPointerException zustande? Java Basics - Anfänger-Themen 13
D Warum ist diese Interfacedeklaration falsch? Java Basics - Anfänger-Themen 5
T Warum brauche ich diese IOException? Java Basics - Anfänger-Themen 30
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
L Immer diese Arrays Java Basics - Anfänger-Themen 11
A was berechnet diese programm? Java Basics - Anfänger-Themen 13
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
P Datentypen Warum findet er diese methoden nicht? Java Basics - Anfänger-Themen 13
N We behandele ich diese Exception? Java Basics - Anfänger-Themen 17
O Ist diese Zahl größer oder kleiner 0? Java Basics - Anfänger-Themen 6
M Ist diese Aufgabe zu umständlich gelöst? Java Basics - Anfänger-Themen 9
M Gibt es eine einfachere Variante diese Aufgabenstellung zu lösen? Java Basics - Anfänger-Themen 11
hdi Brainlag: Warum fliegt diese NPE? Java Basics - Anfänger-Themen 10
J Woher kommt diese NullPointerException? Java Basics - Anfänger-Themen 6
N Verstehe diese Aufgabe nicht! Java Basics - Anfänger-Themen 16
D Wie wird diese Verzweigung genannt? Java Basics - Anfänger-Themen 6
H Klassen zur Anzeige ines Bildes und zum Zeichnen innerhalb diese Bildes Java Basics - Anfänger-Themen 2
N Wer kann diese Zeile erklären? Java Basics - Anfänger-Themen 9
T Warum muss diese Variable final deklariert werden? Java Basics - Anfänger-Themen 5
P [Positiv Erledigt] Ordner mit Bildern auslesen und diese speichern Java Basics - Anfänger-Themen 7
I Was macht diese Funktion? Java Basics - Anfänger-Themen 4
G while (true) ? wodurch wird diese Schleife beendet? Java Basics - Anfänger-Themen 6
G Threads prüfen, ob diese noch laufen. Java Basics - Anfänger-Themen 3
G Class Getopts <-- Wie kann ich diese Class importieren Java Basics - Anfänger-Themen 1
G was bedeuted diese sachen wie <E> und so? Java Basics - Anfänger-Themen 2
S Warum bekomme ich diese Exception ? Java Basics - Anfänger-Themen 3
M wie kann man diese Funktion besser machen ? Java Basics - Anfänger-Themen 3
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
B wo finde ich diese Dateien? Java Basics - Anfänger-Themen 6
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8
S Rahmen zeichnen, wie heisst diese Componente Java Basics - Anfänger-Themen 6
A Was erzeugen diese Eingaben? Java Basics - Anfänger-Themen 2
M bewirken diese Schreibweisen das gleiche? :) Java Basics - Anfänger-Themen 8
G Was bedeutet diese Fehlermeldung von Tomcat Java Basics - Anfänger-Themen 29

Ähnliche Java Themen

Neue Themen


Oben