Laufzeit von Zinsen per Schleife!!??

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Laufzeit von Zinsen per Schleife!!??

    Hallo Leute

    ich bastel seit studen an einer verflixten rechnung...

    Ich habe einen Anfagsbetrag, einen Zinssatz und einen Endbetrag.
    Daraus soll ich jetzt per Schleife (For-Next darf nicht verwendet werden) errechnen.

    ich habs mit

    VB.NET-Quellcode

    1. Do Anfangsbetrag = Anfansbetrag * (1 + Zinssatz/100)
    2. Jahre = Jahre +1
    3. loop Until Anfangsbetrag > Endbetrag


    ?( ?( ?( geht nicht... :cursing:
    Du schreibst erst "Anfangsbetrag", dann aber "Anfansbetrag" (fehlendes "g"). Ist das schon der Fehler? Ansonsten fällt mir auf, dass du "Jahre" zwar änderst, aber gar nicht verwendest. Oder wird das später benutzt?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    ok sorry Rechtschreibfehler...

    im Code passt es aber und läuft trotzdem nicht...

    Ich steh grad völlig aufm Schlauch...

    Sorry was muss ich denn mit Jahre noch machen?

    ?( ?( ?( ?( ?( ?(

    VB.NET-Quellcode

    1. Private Sub cmdRechnen_Click()
    2. Dim Anfagbsbetrag As Currency
    3. Dim Endbetrag As Double
    4. Dim Zinssatz As Integer
    5. Dim Jahre As Integer
    6. Anfangsbetrag = Me.txtStartkapital.Text
    7. Endbetrag = Me.txtWunschbetrag.Text
    8. Zinssatz = Me.txtZinsssatz.Text
    9. Do
    10. Anfangsbetrag = Anfangsbetrag * (1 + Zinssatz / 100)
    11. Jahre = Jahre + 1
    12. Loop Until Anfangsbetrag > Endbetrag
    13. Me.txtLaufzeit.Text = Jahre
    14. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Angel07“ ()

    Ganz oben steht "Anfagbsbetrag", also schon wieder unterschiedlich. Und ich würde an deiner Stelle, nur um es ganz ordentlich zu haben, "Jahre" auch initialisieren (also = 0). Ist nicht nötig, aber einfach schöner, da man sofort sieht, was Sache ist.

    Aber zu deinem Problem:
    Was für Werte gibst du derzeit in die Textboxen ein und was funktioniert nicht? Ist der Wert falsch oder gibt es evtl. eine Endlosschleife?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    du weißt aber schon, dass das der bruteforcemethode gleichkommt - also solange probieren bis es passt...

    Endbetrag = Anfangsbetrag * (1 + Zinssatz/100) ^ n

    mithilfe von logarithmen kannst du das umstellen zu:

    n = log(endbetrag/anfangsbetrag) / log(1 + Zinssatz/100)

    als funktion sähe das so aus (ohne langes probieren per schleife..):


    VB.NET-Quellcode

    1. Function GetJahre(ByVal Startbetrag As Double, ByVal ZielBetrag As Double, ByVal Zinssatz As Double) As Integer
    2. Dim Jahre As Double = Math.Log(ZielBetrag / Startbetrag) / Math.Log(1 + Zinssatz / 100)
    3. Return CInt(Math.Ceiling(CDec(Jahre))) 'ceiling bedeutet, dass IMMER aufgerundet wird. 1,2 jahre werden also zu 2 jahren
    4. End Function



    Ist doch schon gleich viel ordentlicher UND mathematisch korrekt!

    Achso: schalte mal die option Strict auf ON! wahrscheinlich wird die fehlerliste dir dann einen schrecken einjagen aber das ist es wert!
    verwende so seltsame befehle wie ich, z.b. CDec (um eine Double in eine Decimal umzuwandeln) oder Cint(textbox1.text) um den text aus einer textbox (verwende doch nummericUpDown!) in Integer zu konvertieren. ist sauberer und verhindert, dass der user das programm abschmieren lassen kann