Terminierung von Schleifen

Neue Frage »

Auf diesen Beitrag antworten »
neuling96 Terminierung von Schleifen

hallo,

überprüfe ob die schleife Terminiert
int i = 26;
int j = 24;
for (int x = 0; x < 1000; x++)
{
i = i / 12 + 23 * x;
j = (x--) + j + 5;
}

da in jedem durchgang x um eins erhöht wird, wird nach 1000 Durchgängen x<1000 abgebrochen!
 
Auf diesen Beitrag antworten »
eulerscheZahl

Du hast zwar ein x++, allerdings bei der Zuweisung von j auch ein x--
Unterm Strich ändert sich also das x in einem Schleifendurchgang nicht.
Auf diesen Beitrag antworten »
neuling96

müsste dann nicht

int i = 26;
int j = 24;
for (int x = 0; x < 1000; x++)
{
i = i / 12 + 23 * x;
x=x--
j = x+ j + 5;

?

oder hat x-- eine besondere bedeutung?
Auf diesen Beitrag antworten »
eulerscheZahl

aber bei x++ ist es doch auch nichts anderes und das x wird inkrementiert.
x++ erhöht x um eins und x-- zieht eins ab.

x-- ist das selbe wie x = x-1
x = x-- gibt es nicht, da wird der Wert von x auf beiden Seiten des Gleichheitszeichens verändert, da kann nichts gutes rauskommen.
 
Auf diesen Beitrag antworten »
neuling96

d.h der code

int i = 26;
int j = 24;
for (int x = 0; x < 1000; x++)
{
i = i / 12 + 23 * x;
j = (x--) + j + 5;
}
ist gleich

nt i = 26;
int j = 24;
for (int x = 0; x < 1000; x++)
{
i = i / 12 + 23 * x;
x=x-1;
j = x + j + 5;
}
Auf diesen Beitrag antworten »
Karlito

Hallo neuling96,

nein, leider nicht. Das ist am Anfang ein wenig verwirrend: x-- ist ein post-dekrement. D.h. es wird erst der Wert von x verwendet und danach wird der Wert x um 1 verringert.

Äquivalent wäre also folgender code:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
int i = 26;
int j = 24;
for (int x = 0; x < 1000; x++)
{
	i = i / 12 + 23 * x;
	j = x + j + 5;
	x=x-1;
}


Ein pre-dekrement gibt es übrigens auch. Das sieht dann so aus: --x.

Eine bitte noch: verwende bitte in Zukunft die [code][/code] Umgebung für deine Quelltexte.

Gruß,

Karlito
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »