Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
--- Terminierung von Schleifen (http://www.informatikerboard.de/board/thread.php?threadid=1986)


Geschrieben von neuling96 am 07.12.2014 um 13:02:

  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!



Geschrieben von eulerscheZahl am 07.12.2014 um 13:35:

 

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.



Geschrieben von neuling96 am 07.12.2014 um 13:45:

 

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?



Geschrieben von eulerscheZahl am 07.12.2014 um 14:05:

 

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.



Geschrieben von neuling96 am 07.12.2014 um 15:06:

 

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;
}



Geschrieben von Karlito am 07.12.2014 um 16:23:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH