While so lange bis sich ein Wert nicht verändert



  • Habe ein Problem: Und zwar will ich etwas in eine while Schleife schreiben und das soll aber nur so lange ausgegeben werden, bis der wert den ich ausgeben will sich nicht mehr verändert.
    Wäre sehr nett wenn mir jemand helfen könnte 🙂

    MfG



  • Kam mir jetzt so als erstes in den Sinn.

    int wert = 0;
    int wertAlt = 0;
    do
    {
        wertAlt = wert;
        aenderWert(&wert);
    } while (wert != wertAlt)
    


  • Geht das auch nur mit while? Also ohne do?

    z.b

    int a
    int b
    while (a>=b) {
    *Rechnung*
    cout<<a;
    cout<<b; 
    }
    

    so hierbei ist zu beachten dass a immer größer als b bleibt. Also will ich a und b solange ausgeben bis der wert sich für a und b verändert. Wenn der irgendwann gleich bleibt, soll das nicht mehr ausgegeben werden.

    MfG



  • Klar.
    Aber dann müssen a und b mit unterschiedlichen Werten initialisiert werden, da sonst die Schleife nicht ein einziges mal ausgeführt wird.
    Außerdem: Semikolon hinter Befehlen nicht vergessen!
    Also so sollte es dann ungefähr aussehen:

    int a = 0; // Anstelle von 0 dein Startwert
    int b = a + 1;
    while (a >= b) 
    {
        std::cout << a;
        std::cout << b; 
    }
    


  • Erkläre mal was du konkret haben möchtest und präsentiere deinen Lösungsvorschlag Vorschlag (als anständig formatiertes, kompilierbares Programm).

    PS: Es git mit while , do while oder for . Jenachdem was du konkret brauchst ist eine der Schleifen eleganter als die anderen aber im Prinzip funktionieren alle.



  • Also hier mal mein Programm:

    int anzahl,maximal_anzahl,jahr,differenz;
    anzahl=50;
    maximal_anzahl=350;
    jahr=0;
     while (maximal_anzahl>=a) {
            differenz=maximal_anzahl-anzahl;
            anzahl=anzahl+(differenz*6/100); //weil pro jahr werden es 6% von der           differenz  mehr
    
            jahr++;
         cout<<jahr;
         cout<<anzahl;
     }
    

    so und jetzt gibt er es unendlich lange aus. Wie kann ich das denn verhindern? Also wie gesagt dass a und b nur so lange ausgegeben werden, solange sie sich verändern.



  • Wenn du nach while a durch jahr ersetzt sollte es gehen.
    Für diesen Fall würde ich dir aber eine for-Schleife empfehlen.
    Achja:

    anzahl=anzahl+(differenz*6/100);
    

    Würde ich durch

    anzahl += (differenz*6/100);
    

    ersetzen.
    Der Maschinencode wird zwar glaub ich der gleiche sein, aber ist meiner Meinung nach lesbarer.



  • Nein so klappt es leider nicht. Es wird zwar nicht mehr unendlich aber bei Jahr kommt immer noch was zu großes raus. Ich will ja wissen nach wie vielen Jahren die maximal Anzahl (350) mit einer Wachstumsrate von 6% ,von der Differenz von maximal Anzahl und anzahl, pro Jahr, erreicht ist.
    Und sorry hab mich verschrieben: nach while sollte nicht a sondern anzahl stehen.



  • Ich seh jetzt keinen Fehler.
    Wieviel Jahre hast denn raus?
    Also wieviel gibt dir das Programm aus.



  • Nach 351 Jahren 334 Anzahl. Aber nach 350 Jahren sind es auch 334..



  • Guck dir mal deine typen an. Ohne genauer zu prüfen, bezweifel ich mal das int der richtige Typ für alle Variablen ist - zumindest schneidest du mit

    anzahl=anzahl+(differenz*6/100);
    

    da ein paar Nachkommastellen ab, und das dürfte gerade bei Prozentrechnen nicht in deinem Sinn sein.



  • Wie schon gesagt, die Differenz wird immer kleiner... bis sie bei 16 so klein ist, das die 6% kleiner als eins wird und somit eine null im int steht.

    Wenn das so gewollt ist, sowas in der Art?:

    int main(int argc, char *argv[]) 
    { 
    	int anzahl = 50, maximal_anzahl = 350, jahr = 0;
    
    	while (true) {
    		int anzahl_alt = anzahl;
    
    		int differenz = maximal_anzahl - anzahl;
    		anzahl += differenz*6/100;
    
    		if (anzahl == anzahl_alt)
    			break;
    
    		jahr++;
    
    		cout << jahr << ". Jahr => Anzahl = " << anzahl << endl;
    	}
    }
    

Log in to reply