Vektor Zahl zwischenspeichern und subtrahieren



  • Grüßt euch,

    mein Programm liest beliebig viele Werte des Benutzers ein, die im Vektor gespeichert werden.
    Machen wir ein Beispiel: Der Benutzer liest 5 Zahlen ein.

    100, 35, 40, 5, 10

    Da der erste Wert bei mir immer negativ ist (der Grund hierfür ist, dass ich den Kapitalwert berechnen möchte) soll folgende Rechnung ausgeführt werden:

    -100+35= -65
    -65 + 40 = -25
    -25 + 5 -20
    -20 + 10 = -10

     int t = 0;
        double result = 0.0;
        double kapitalwert = 0.0;
        
        std::cout << "Rechnung:\n";
        std::cout << "Jahre\t" << "Wert\t" << "Zinssatz\n";
    
    
    
        for (unsigned int i = 0; i < inv.size(); ++i) {
    
            //std::pow als Standardfunktion zur Potenzierung von (1+irate)^t 
    
            result = this->inv[i] * std::pow((1 + irate), t);
            kapitalwert = result - inv[0]; 
    
            /*setpricision ist eine Funktion der library <iomanip> zur Darstellung
            von Nachkommastellen nach (n).
             * t wird *(-1) genommen, um Jahre für die Ausgabe zu invertieren  */
    
            std::cout << std::setprecision(15) << t * (-1) << "\t" << result << "\t" << irate << "\n";
            std::cout << kapitalwert << "\n";
    
            t--;
        }
    

    Ich hänge in Zeile 15 fest, da in der Zeile die Verrechnung statt finden soll.
    Er verrechnet zwar den ersten Wert richtig, jedoch wird dann der Ausgangswert genommen und mit dem zweiten Wert verrechnet, ohne die Berechnung mit dem ersten Wert zu beachten.

    Ich weiß natürlich warum es sich so verhält, da ich

    kapitalwert = result - inv[0]
    

    rechne. Ich greife immer auf den ersten Inhalt vom Vektor inv zu und verrechne bei jedem Durchlauf den ersten Wert des Vektors mit dem errechneten Wert der Abzinsung.

    Problem ist: ich komme nicht auf die Gleichung mit der ich die Verrechnung, unter Berücksichtigung des vorherig berechneten Wertes, durchführe.



  • Wenn Dir hier niemand antwortet, liegt es vielleicht daran, dass es anderen so geht wie mir:
    Ich verstehe nicht, was Du machen willst.
    Hier:
    @Suprax sagte in Vektor Zahl zwischenspeichern und subtrahieren:

    Der Benutzer liest 5 Zahlen ein.
    100, 35, 40, 5, 10
    Da der erste Wert bei mir immer negativ ist (der Grund hierfür ist, dass ich den Kapitalwert berechnen möchte) soll folgende Rechnung ausgeführt werden:
    -100+35= -65
    -65 + 40 = -25
    -25 + 5 -20
    -20 + 10 = -10

    sieht es so aus, als wenn Du einfach 5 Werte addieren willst, in Deinem Programmcode finde ich so etwas aber nicht wieder.
    Also obiges wäre:

    v[0] *= -1;
    int res = 0;
    for(int i = 0; i < v.size(); ++i)
      res += v[i];
    


  • @Belli manchmal ist es schwer sich für einen Laien auszudrücken. Bekanntliches Problem beim Studieren und/oder in der Ausbildung.

    Die Lösung für mein Problem, die ich nach mehreren Stunden tüffteln herausgefunden habe war:

    1. einen zweiten Vektor anlegen, der die Ergebnisse aus der Berechnung
    result = this->inv[i] * std::pow((1 + irate), t);
    

    im Vektor speichert.

    1. Den Vektor in einer neuen Methode aufrufen und folgende Rechnung durchführen:
    double kapitalwert = 0.0;
    
        std::cout << "Kapitalwert:\n";
    
        this->res[0]= -this->res[0];
        
        for (unsigned int i = 0; i < res.size(); ++i) {
    
            
           
      
            kapitalwert = kapitalwert + res[i];
    
            
        }
        
        std::cout << kapitalwert << "\n";
    

    Das Problem ist gelöst.