Für Anfänger unerklärliche Endlosschleife ?



  • Guten Tag, ich wollte ein Programm schreiben, welches mir bei gegebenem Startkapital und Jahreszinssatz ausrechnet, wieviele Jahr es dauert einen bestimmten Wert erreicht zu haben. Dies endet aber seltsamerweise in einer Endlosschleife fürhte ich, auf jeden fall rechnet mein Computer ewig lange für eine nicht wirklich anspruchsvolle Aufgabe. Hier der Code:

    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
    
        int iKapital = 100;
        double dZinsen = 3.2;
        int iZiel = 5000;
        int i = 1;
    
        while(iKapital < iZiel)
        {
            iKapital = (iKapital / 100) * dZinsen;
            i++;
        }
    
        cout << "Es werden " << i << " Jahre benötigt!" << endl;
    
        return 0;
    }
    


  • Wird i in der Schleifenbedingung ausgewertet?

    Edit:
    LOL fehlgeleitet durch böse Benennung von Variablen.


  • Mod

    Nach dem ersten Durchlauf ist ikapital = (100/100) * 3.2 = 3. Beim zweiten Durchlauf ist es (3/100) * 3.2 = 0. Und so weiter. Du möchtest wohl mit eher ikapital = ikapital * (1 + dZinsen / 100).

    Und lass die ungarische Notation sein.



  • Du hast in Zeile 17 einen Rechenfehler eingebaut - dadurch wird das Kapital mit jedem Jahr kleiner. Wenn du dort ein += setzt, sollte es eigentlich klappen.

    (PS: Du weißt, daß es schnellere Wege gibt, eine geometrische Reihe zu berechnen?)


  • Mod

    CStoll schrieb:

    (PS: Du weißt, daß es schnellere Wege gibt, eine geometrische Reihe zu berechnen?)

    Das hatte ich mir auch gedacht, aber streng genommen rundet die Bank jedes Jahr, daher ist das vielleicht keine so schlechte Idee das so zu rechnen. Zumindest wenn es mal ganz auf den allerletzten Cent ankommt. In 99.9999% der Fälle sollte es aber mit einem Logarithmus in einem Schritt getan sein und selbst wenn nicht, weicht das Ergebnis nur minimal ab.


Anmelden zum Antworten