PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verstehe die While Anweisung nicht , oder doch? ...



dehctiw
03.01.2009, 20:43
Es geht um folgenden Code:


#include <iostream>
int main()
{
int sum = 0, val= 1;
while (val <= 10) {
sum += val;
++val;
}
std::cout << "Sum of 1 to 10 inclusive is "
<< sum << std::endl;
return 0;
}

Kann mir jemand erklären ( verständlich bitte.. ) wie "sum" hier einen Wert von 55 erhält ?
sum hat den Wert 0, val den Wert 1.
Jetzt wird doch so oft sum + val gerechnet bis val den Wert 10 hat oder nicht?

Also sieht die Schleife eigentlich so aus :

0+1 = 1
1+1 = 2
2+1 = 3
3+1 = 4
4+1 = 5
5+1 = 6
6+1 = 7
7+1 = 8
8+1 = 9
9+1 = 10

Gut zusammen gerechnet ergibt das 55.
Sehe ich das richtig das die einzelnen Ergebnisse also immer zwischendurch im int sum zwischengespeichert werden?
Und das nach jeder Schleife, warum?
Ich versteh die Logik nicht weil ja bei jeder Schleife int sum wieder 0 sein müsste und nicht den Wert des vorrigen schleifendurchlaufes.

Ich bitte um Aufklärung

Gruß

enco
03.01.2009, 21:21
Nein, du erhöst val bei jedem Durchlauf um 1, also sieht die Rechnugn so aus:
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
6 + 4 = 10
10+ 5 = 15
...
etc

Schreib in der Schleife einfach sum += 1, das ist wohl das was du wolltest.

-[RiDER]-
03.01.2009, 21:36
Schreib in der Schleife einfach sum += 1, das ist wohl das was du wolltest.
Oder sum++.

Aber das, was das Programm jetzt tut, ist auch das, was die Ausgabe des Programms angibt: "Sum of 1 to 10 inclusive"


Sehe ich das richtig das die einzelnen Ergebnisse also immer zwischendurch im int sum zwischengespeichert werden?
Ja.

Und das nach jeder Schleife, warum?
Weil Du es so definiert hast.
sum += val ist eine Kurzschreibweise (unter Anwendung eines binären Zuweisungsoperators) von sum = sum + val, also "addiere den Wert von val zum Wert von sum hinzu und speichere diesen neuen Wert wieder in sum".

Ich versteh die Logik nicht weil ja bei jeder Schleife int sum wieder 0 sein müsste und nicht den Wert des vorrigen schleifendurchlaufes.
Nein, sum wird vor dem ersten Schleifendurchlauf einmalig der Wert 0 zugewiesen, dann während jedem Schleifendurchlauf der (sich ändernde) Wert von val hinzuaddiert.

Voilà tout.

GreetZ RiDER :D :D :D

dehctiw
03.01.2009, 22:19
Super Vielen Dank!