wieso ist das eine endlosschleife?
-
Steffan2 schrieb:
und wieso wird "viel glueck" hier nur 10 mal ausgeführt:
int main ( ) f
for ( int i =1; i <=10; i++)
for ( int j =1; j <=10; j++)
for ( int k=1; k<=10;k++)
i f ( ( i==j ) && ( i==k ) )
cout << "Viel Glueck!" << endl ;
return 0 ;"Viel Gleuck" wird immer dann ausgegeben, wenn i gleich j und i gleich k ist. Das impliziert aber auch, dass j gleich k ist. Daraus folgt: einzig moegliche Kombinationen [ijk] sind 111, 222, ... , 999 {10}{10}{10} (die Klammern um nicht zu verwirren.
Btw. Mache ich grade deine Hausaufgaben?
-
heißt also, dass i,j und k gleichzeitig erhöht werden?
-
nein machst du nicht, ich gehe nur ein paar beispielaufgaben zur wiederholung durch und hatte da eben die diskrepanz mit der abbruchbedingung laut skript und war mir nicht sicher, ob ich das mit i,j und k richtig gesehen habe. sicher ist sicher!
-
Steffan2 schrieb:
heißt also, dass i,j und k gleichzeitig erhöht werden?
Natürlich nicht! Wenn du den Ablauf nicht verstehst, geh doch schrittweise mit dem Debugger durch. Die Alternative wäre z.B., sich die 3 Werte in der inneren Schleife ausgeben zu lassen. Aber ich hätte es lieber, wenn du ersteres machst.

-
Steffan2 schrieb:
heißt also, dass i,j und k gleichzeitig erhöht werden?
Nein! Eigentlich zaehlst du von 1 bis 999 schrittweise, wobei k deine letzte Stelle, j deine vorlezte, und i deine erste ist.
knivil, du gehst aber ab. 50 Beiträge in 2 Tagen? Hast du kein Leben?
Ist lustig hier. Btw. schon mal sowas bekommen, erstaunt mich immer wieder:
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.
-
ahhh logisch...jetzt hab ichs!
-
Steffan2 schrieb:
ausführbedingung? in meinem skript steht abbruchbedingung. aber als ausführbedingung macht das natürlich sinn...
In manchen Sprachen steht an dieser Stelle auch eine Abbruchbedingung (Zumindestens erinnere ich mich noch entfernt daran, das entweder GFA-Basic oder Turbo Pascal an bestimmten Schleifen gegen eine genau umgedrehte Logik geprüft hatten).
Unter C++:
// Folgendes... // [1] [2] [3] for (int i = 5; i > 2; i += 5) { /*Schleifenrumpf*/ }; // Entspricht etwa: { int i = 5; // [1] while(i > 2) // [2] { /*Schleifenrumpf*/ i += 5; // [3] } }
-
Danke, ich werde in den nächsten Tagen sicherlich noch mehr Fragen haben

-
for (int i = 5; i > 2; i += 5){ cout << i; }Naja, eigentlich sollte das ja keine Endlosschleife sein, weil beim Überschreiten des maximalen int-Werts ein Bufferüberlauf entsteht und i somit den minimal mit einem int darstellbaren Wert annimmt. Dieser ist dann kleiner als 2. Dadurch sollte die Ausführbedingung falsch sein und die Schleife abgebrochen werden.
-
JohnMcLane schrieb:
Naja, eigentlich sollte das ja keine Endlosschleife sein, weil beim Überschreiten des maximalen int-Werts ein Bufferüberlauf entsteht und i somit den minimal mit einem int darstellbaren Wert annimmt. Dieser ist dann kleiner als 2. Dadurch sollte die Ausführbedingung falsch sein und die Schleife abgebrochen werden.
Ja, das wurde aber schon zu Beginn gesagt.
Das Verhalten bei Überläufen von
signed-Typen ist vom Standard jedoch nicht garantiert.
-
JohnMcLane schrieb:
Naja, eigentlich sollte das ja keine Endlosschleife sein, weil beim Überschreiten des maximalen int-Werts ein Bufferüberlauf entsteht und i somit den minimal mit einem int darstellbaren Wert annimmt. Dieser ist dann kleiner als 2. Dadurch sollte die Ausführbedingung falsch sein und die Schleife abgebrochen werden.
Man, das sollte er mir doch verraten, was nach ca. 2^31 / 5 Iterationen passiert. Spielverderber.

-
als ob...
-
Ist doch nur Spass ...
-
knivil schrieb:
Btw. schon mal sowas bekommen, erstaunt mich immer wieder:
Sie können einen Beitrag nicht so schnell nach Ihrem letzten absenden, bitte warten Sie einen Augenblick.
Klar, vor allem wenn das Forum mal wieder hängt und man verzweifelt versucht, seinen Beitrag zu senden (in letzter Zeit ist sowas aber zum Glück nicht mehr vorgekommen). Das soll vermutlich verhindern, dass Bots das Forum vollkommen zuspammen...