Sparplan-Programm hat Fehler :(
-
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main () { int n; double p,G,R,Ki,Zi; cout<<"Geben Sie bitte den Grundbetrag ein!"<<endl; cin>>G; cout<<"Geben Sie bitte die Anlagedauer in Jahren ein!"<<endl; cin>>n; cout<<"Geben Sie bitte den jaehrlichen Einzahlungsbetrag ein!"<<endl; cin>>R; cout<<"Geben Sie bitte den Zinsfuss ein!"<<endl; cin>>p; if (G<=0) {cout<<"Abbruch!"<<endl;; } else if (R<0 || p<0) {cout<<"Abbruch!"<<endl; } else {double q; q= 1+ (p/100); for (int i=1; i<=n;i++) { Ki= G; Ki= ((Ki)+ R*i); Zi= Ki*(q-1); cout<<"|"<<setw(10)<<left<<"Jahr"<<"|"<<setw(15)<<left<<"Zinsertrag"<<"|"<<setw(10)<<left<<"Kapital"<<"|"<<endl; cout<<"|"<<setw(10)<<i<<"|"<<setw(15)<<setprecision(5)<<Zi<<"|"<<setw(10)<<setprecision(5)<<Ki<<"|"<<endl; } } return 0; }Hallo, hab in der for Schleife einen Fehler
Hoffe mir kann einer helfen.Danke
Hier die Aufgabenstellung:
Schreiben Sie ein C++–Programm namens Sparplan, in dem ausgehend von einem Grundbetrag
das Kapital und die anfallenden Zinsen, die sich in einem vorgegebenen Anlagezeitraum
bei zusätzlich jährlicher Einzahlung eines festen Betrages ergeben, berechnet werden.
Sei dazu G€R>0 der Grundbetrag, R€R>=0 der jährliche Einzahlungsbetrag, n€N der Anlagezeitrauin Jahren und p€R>=0 der Zinsfuß, mit dem das Guthaben während des gesamten Anlagezeitraumes verzinst wird. Soll der Betrag R jeweils am Ende eines Jahres eingezahlt werden, dann lassen sich die anfallenden Zinsen Zi€R>=0 und das Kapital Ki€R>0 am Ende des i-ten Jahres, ausgehend von K0 = G, für i = 1, 2, . . . , n wie folgt berechnen:
Zi = Ki-1(q - 1), (1)
Ki = Ki-1q + R (2)
q heißt Zinsfaktor und ist definiert als
q := 1 +p/100
. (3)
Gehen Sie bei der Umsetzung wie folgt vor:
• Lesen Sie zu Beginn den Grundbetrag G, die Anlagedauer n in Jahren, den jährlichenEinzahlungsbetrag R und den Zinsfuß p von der Konsole ein.
• Prüfen Sie anschließend mit Hilfe einer doppelseitig bedingten Anweisung sowie dem logischen Operator ||, ob sinnvolle Werte eingegeben wurden.
• Speichern Sie im Fall gültiger Eingaben den Zinsfaktor q in einer lokalen Variablen mit em Namen q vom Typ double ab. Berechnen Sie anschließend in einer for–Schleife den Zinsertrag Zi im i-ten Jahr und das Kapital Ki am Ende des i-ten Jahres gemäß denGleichungen (1) und (2), und geben Sie beide Werte tabelliert auf der Konsole aus.
Hinweis: Setzt man Gleichung (2) in der Form K = K*q + R; um, dann benötigt man
zur Darstellung des Kapitals Ki nur die Variable K. Die Variable R beschreibt dabei den
jährlichen Einzahlungsbetrag R.
Testen Sie das Programm mit den Zahlentupeln (250, 10, 300, 5), (250, 1, 300, 5) und (250, 10,
300, 0) für G, n, R und p.
-
Julchen schrieb:
Ki= G;Was soll das tun?
-
K den Wert von G zuweisen, also Kapital im Jahr 0 soll gleich dem Grundbetrag auf dem Konto sein, im 1 Jahr soll dann Geld eingezahlt werden und der Betrag (Guthaben +Einzahlung) soll dann verzinst werden.(Zinsertrag soll dann auch ausgegeben werden, hier Zi)
-
Vielleicht ware es hilfreich zu sagen, wo der Fehler liegt?
Also, ich bin mir zwar nicht sicher, aber ich glaube das KI=G; solltest du deiner Formel nach NICHT in die for-schleife setzen sondern davor. Ansionsten wird bei jedem durchlauf (also fuer jedes Jahr) Ki wieder auf K0 gesetzt. Und ich glaube, dass das nicht beabsichtigt ist, oder?
Dann noch kurz:
1. die {} bei den beiden ersten ifs kannst du weglassen, da dahinetr nur eine einzige anweisung steht.
2. einmal hast du nen ; zuviel (Tippfehler?)
3. die beiden ersten If Anweisungen kannst du locker zu eienr zusammenfassen. (wird ja genau das gleiche gemacht.Hoffe was ich gesagt hab kommt hin.
EDIT: ich glaube bei Ki= ((Ki)+ R*i); fehlt noch ein q, und was das i hinter dem R da soll seh ich in der Formel zumindest grad auch nicht (kann sein, dass ich da was im Text uebersehen hab). Ausserdem kannst die Klammern weglassen.
-
Wer verlangt so was komisches mit der späten Eingabeprüfung?
Einfacher und übersichtlicher:[code] cout<<"Tralala"; do cin >> G; while (G < 1); cout << "ZinsSatz: "; do cin >> z; while ( z < 0 && z > 100 ); [/code]Das macht den späteren Code einfacher und sicherer.
Gruss Jerry