+1 Daumen
792 Aufrufe

for (bool x = false; x != true; x = !x)
for (bool y = false; y != true; y = !y)
std::cout << (x || y) << ’ ’;

Problem + Frage: 

Bei einem Online Compiler compilt dieses gar nicht, 
Kann jemand helfen ? 


Meine Idee:
Es geht in eine Schleife,
die bool variabel x=false ist in der ersten for-Schleife deklariert und initialisiert.
die Bedingung x!=true ist wahr, also wird die Schleife ausgeführt. 

"Wird ausgeführt.." bedeutet,
es fängt sofort eine neue Schleife an. 

Darin (also in der inneren Schleife) wird die neue Variabel y=false deklariert und initialisiert. 
Auch die Bedingung schafft y denn sie ist ungleich 1. also geht es somit in die dritte Zeile. 

Der Output meiner Meinung: 

Sofern ich mich korrekt erinnere, ist ( 0 || 0) genau dann wahr, wenn beide variablen den gleichen Wahrheitswert haben. 
Also ist der Output 1

Und jetzt greifen die Anweisungen aus den for Schleifen

1. Zuerst greift y = !y : 
Aktuell ist y = false . Jetzt greift aber die Anweisung dass nichtfalse = wahr = y ist. 

Wir kriegen also y = true. 

2. Zweitens greift x = !x. 
Aktuell ist x = false. Jetzt sagt aber die neue Anweisung das nichtfalse = wahr = x ist. 

Wir kriegen also x = true. 

3. Und jetzt gehts wieder in die obeste Schleife. 

Dort wird die Schleife gar nicht ausgeführt da x = true und die Bedingung für den Eintrirtt verletzt. 
Somit wird auch die zweite Schleife übersprungen und somit auch die Anweisung in der dritten Zeile und das Programm endet. 


4. Der Output insgesamt: 
true. 






Avatar von

1 Antwort

+1 Daumen

Hallo!

Der Output ist false.

Die erste for-Schleife wird initialisiert, x ist false. Somit ist die Bedingung x != true erfüllt. Bevor nun der Bereich 3 vom beachter wird, wird zunächst der Anweisungsblock ausgeführt. Das ist in diesem Fall, weil keine Klammer, nur die zweite for-Schleife.

Gleiches Spiel, jetzt mit y. Beide Variablen x und y sind im ersten Durchgang false.

Jetzt wird in der Konsole ausgegeben, ob wenigstens eine der beiden Variablen true ist.

Weil beide false sind, ist auch das Ergebnis false. (nur t-f, f-t, t-t ergäbe ein true)

Somit wird in der Konsole ein false ausgegeben.

Der Anweisungsblock von for-Schleife 2 ist abgeschlossen. Y wird auf !y gesetzt, somit ist y jetzt true. Es folgt kein weiterer Durchgang, da die Bedingung in Bereich 2 nicht erfüllt ist.

Der Durchgang von for-Schleife 1 endet nun auch, da der Anweisungsblock abgeschlossen ist.

X wird ebenfalls auf true gesetzt, da x = !x. Auch für diese for-Schleife ist die Bedingung nun nicht mehr erfüllt.


Beste Grüße

Felix

Avatar von

ACHTUNG!


Die Anweisung in Zeile drei ist der Anweisungsblock zur for-Schleife in Zeile 2! Diese for-Schleife ist wiederum der Anweisungsblock von Zeile 1!


Warum? Es fehlen hier die geschweiften Klammern. Diese schließen normalerweise den Anweisungsblock ein. Wenn aber nur eine Anweisung ausgeführt werden soll (so wie hier) können die geschweiften Klammern weggelassen werden. Die Schleife endet mit dem Semikolon der Anweisung oder dem geschweiften Klammernpaar einer bed. Anweisung oder Schleife.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community