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 [co
de][/co
de] Umgebung für deine Quelltexte.
Gruß,
Karlito
Forensoftware: Burning Board, entwickelt von WoltLab GmbH