Bitte um Erklärung: while-Schleife in diesem Programm (C++)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

  • Ich bin auf folgenden Code gestoßen und zebreche mir ein wenig über
    eine Zeile den Kopf. Hier erst einmal der Rahmen des Programms:


    Was das Programm eigentlich macht, ist an dieser Stelle nicht relevant, ich
    habe trotzdem den Rest hinzugefügt damit die Verschachtlungen deutlich
    werden. Eigentlich geht es mir nur um die Zeile 11:


    Code
    while ((x%2 == 0) || (y%2 == 0));

    Meines Erachtens müsste er bei dem Befehl

    Code
    x%2 == 0

    prüfen, ob die Eingegebene Zahl x gerade ist, er teilt x durch 2
    und vergleicht (==) den Rest (%) mit 0. Bsp.: Nehmen wir für x=4.
    4/2=0
    0==0 -> true
    Oder x=5:
    5/2=2 Rest 1
    1==0 -> false
    Das gleiche gilt in der 2 Bedingung auch für die Variable y. Nun haben wir
    noch den logischen "Oder" Operator (||). Dieser sagt doch nur aus, dass
    EINE der beiden Bedingungen erfüllt sein muss um die while Anweisung
    auszuführen.


    So, und jetzt einmal wie das ganze in der Praxis bei mir läuft. Ich gebe x=2
    und y=5 ein. Das Programm fährt aber nicht mit den anderen Schleifen
    fort, sondern wiederholt den Eingabebefehl. Also fragt er mich solange
    nach x und y bis ich zwei ungerade Zahlen eingegeben habe. Daraus
    ergeben sich 2 Fragen für mich:


    1. Warum führt er die weiteren Anweisungen erst durch wenn beide
    Bedingungen NICHT zutreffen?
    2. Und vorallem, warum müssen beide nicht zutreffen wenn doch das
    "Oder" die Bedingungen vernüpft?

  • Ich glaube, du hast die Funktion des "while" missverstanden. Die Schleife wird solange ausgeführt, wie die Bedingung hinter "while" wahr ist.


    Wenn du schreibst:

    Code
    do
         {
             cout <<"x: ";
             cin >> x;
             cout << "y: ";
             cin >> y;
        }
        while ((x%2 == 0) || (y%2 == 0));


    Dann bedeutet das: Frage weiter nach Zahlen, wenn x oder y gerade ist.


    Im Umkehrschluss also: Frage nicht mehr nach Zahlen, wenn x UND y ungerade sind.

  • Zitat von Ken;922924


    1. Warum führt er die weiteren Anweisungen erst durch wenn beide
    Bedingungen NICHT zutreffen?
    2. Und vorallem, warum müssen beide nicht zutreffen wenn doch das
    "Oder" die Bedingungen vernüpft?


    1. Eine "A oder B"-Bedingung ist dann erfüllt, wenn A oder B wahr sind. Es genügt also, wenn eine von beiden Bedingungen erfüllt sind. Demnach wird die Schleife erst dann beendet, wenn beide Bedingungen NICHT zutreffen.
    2. Ist eigentlich dieselbe Frage nur anders formuliert, daher passt auch die Antwort von 1. :cool: