Frage zu While-Schleife



  • Hallo,

    also ich hab hier folgenden Code, der eine Zahl (also hier 30, soll aber auch für andere Zahlen gelten) solange durch 2 teilen soll, bis entweder null oder eins Rest ist:

    #include <iostream>
    using namespace std;

    int main()
    {

    int number = 30;
    int result = 0 ;

    while ( result <= 1)
    {
    result = number/2;
    result = result/2;
    }

    cout << result << endl;

    return 0;

    }

    Warum funktioniert dieser Code nicht? Ich bin mit meiner Geduld schon am Ende! 😡

    danke & Lg



  • Weil die Abbruchbedingung falsch ist?



  • Ich tippe mal so nach grobem Drüberschauen, daß result nach dem ersten Schleifendurchlauf 7 ist; damit ist die Schleifenbedingung result <= 0 nicht (mehr) erfüllt und die Schleife ist sofort zu Ende.



  • Nach bereits 34 Posts solltest Du wissen, dass:

    • Code-Tags zu benutzen sind
    • "Geht nicht" keine Fehlerbeschreibung ist

    Ansonsten ist bei Deinem Code result immer gleich number / 4 (also 30/2/2), und die Schleife läuft, solange result kleiner oder gleich 1 ist.



  • Also ich schreibe hier mal deinen Algorithmus aus:

    Solange result kleiner oder gleich 1, tue wiederholt folgendes:
        weise result den wert number geteilt durch 2 zu.
        weise result den wert number geteilt durch 4 zu.
    


  • #include <iostream>
    using namespace std;
    
    int main()
    {
        float number = 57;
    
        while(number >= 1)
        {
            std::cout << number << std::endl;
            number = number/2;
        }
    }
    

    Wenn du der Schleife sagst, sie soll solange ausgeführt werden wie sie kleiner oder gleich 1 ist, kann deine Schleife auch nicht gehen. result ist bei dir zu Anfang auf 0 gesetzt, Bedingung erfüllt ! So nun kriegt sie aber einen wert zugewiesen der größer als 1 ist und somit ist die Bedingung nicht mehr erfüllt, weil die Schleife solange ausgeführt werden soll, wie sie kleiner ist als 1. Außerdem, selbst wenn du die Bedingung verändern würdest, würde dein Programm immer noch nicht gehen, weil result in jedem Durchgang in der Schleife der Wert 30 zugewiesen wird und das immer wieder.


Log in to reply