In bestimmten Intervallen rechnen
-
[url]Hallo zusammen,
ich bin gerade dabei, einen Prozent-Rechner zu erstellen. Man ginbt an:Kapital
Zinssatz
Dauer (Auswählen zwischen Tagen, Monaten oder Jahren)
Monatliches SparenSo. Ohne das monatliche zusätzliche einkommen auf das Konto klappt alles wunderbar, sogar das Tag-genaue Ausrechnen. Will ich aber nun jeden MONAT einen bestimmten Betrag dazu zahlen, muss man natürlich alles mitverzinsen. Ein Beispiel:
Ich zahle 3000€ ein, mit einem Zinssatz von 3,5%, einer dauer von 68 Tagen und ich zahle jeden monat nochmals 500 € ein. Schriftlich müsste ich nun rechnen:
1. (3000 * 3,5 * 30)/36000 = 8,75
Dewegen nur mit 30 tagen multiplizieren, weil ich ja nach einem monat die 500 € dazu rechnen muss, also;2. 3000 + 8,57 + 500 = 3508,75
3. (3508,75 * 3,5 * 30)/36000 = 10,23
4. 3508,75 + 10,23 + 500 = 4028,98
5. (4028,98 * 3,5 * 8)/36000 = 3,13
Deswegen hier nur mit 8 multiplizieren, weil mann ja nun 68 Tage erreicht hat.6. 4028,98 + 3,13 = 4032,11 €
*Hächel*. Jetzt solltet ihr mein Problem besser verstehen können. Also wie kann ich C++ sagen, dass er bei 68 Tagen erst zwei mal mit 30 und dann noch einmal mit 8 rechnen soll?
Ich hoffe, ich habe euch mit meinem Roman nicht zu viel Lebenszeit abgenommen

-
Dazu kannst du den Modulo-Operator ('%') benutzen. Der gibt dir von einer Ganzzahlen-Division den Rest aus. Wenn du also 68 hast, dann rechnest du 68/30=2 und 68%30=8 (also der Rest). Du weißt nun also, dass du zweimal mit 30 (kannst du dann in eine for-Schleife packen) und dann noch mal mit 8 rechnen musst.
-
Mach ne Schleife, wo er jedesmal die Monatsberechnung macht, 30 Tage von den noch zu bearbeitenden tagen abzieht und das solange wie noch Tage übrig sind.
-
Hui, das ging ja schnell. DANKE

An eine while-schliefe hab ich auch gedacht, nur leider hatten wir dieses thema nur ganze 2 std. in der Schule, hab also praktisch nichts darüber gelernt. Könntest du (ihr) mit vllt eine Hilfestellung geben, oder einen teil vom Quelltext hier hochladen? Wäre echt nett
@_matze:
Dein Vorgang hört sich leichter an, nur leider hab ich noch nie mit "modulo" gerechnet. Ich weiß gar nicht, was das ist. Kannst ja aber trotzdem mal einen ansatz hochladen, vllt versteh ichs dann
-
Phimue schrieb:
Hui, das ging ja schnell. DANKE

An eine while-schliefe hab ich auch gedacht, nur leider hatten wir dieses thema nur ganze 2 std. in der Schule, hab also praktisch nichts darüber gelernt. Könntest du (ihr) mit vllt eine Hilfestellung geben, oder einen teil vom Quelltext hier hochladen? Wäre echt nett
Es gbt im Netz eine ganze Reihe Tutorials, die die Schleifen zur Genüge besprechen. Google dürfte da helfen.
@_matze:
Dein Vorgang hört sich leichter an, nur leider hab ich noch nie mit "modulo" gerechnet. Ich weiß gar nicht, was das ist. Kannst ja aber trotzdem mal einen ansatz hochladen, vllt versteh ichs dann
Wikipedia kann dir weiterhelfen beim Verständnis der Modulo-Operation. Oder eben besagte C++-Tutorials.
Das sind alles Grundlagen, die du dir unbedingt aneignen solltest.
-
Ganz kurz: Du kennst doch Division aus der Grundschule. Da hat man gerechnet: 5/2=2 Rest 1. Das kannst du mit 2 Operationen in C++ nachbilden:
int divRes=5/2; //ergibt 2 int modRes=5%2; //ergibt 1
-
Das mit dem Modulo hab ich jetzt verstanden und funktioniert auch

Aber wie kann ich dem Prog jetzt sagen ,dass der bei 68 Tagen eben nur 2 Mal mit der zahl 30 Rechnen soll? ich hab da jetzt ungefähr stehen:inta,b,c;
a=StrToInt(Edit1->Text);
b=a/30;
c=a%30;
Label1->Caption=IntToStr(b);
Label2->Caption=IntToStr(c);Also hab ich eben erstellt, um mir modulo slebst zu erklären und das funktioniert auch. Jetzt bekomme ich dem Wert 2 und den wert 8. Mit der 8 kann ich schon was anfangen ( (3000*3,5*8)/3600; ). Aber was mache ich jetzt mit der 2? Sorry wegen der Umstände, aber wikipedia sagt mir nichts ("versteh ich nicht ^^), und bei google hab ich schon seit über 2 std gesucht und nie das passende gefunden, also ich kanns nicht auf mein beispiel anwenden...
-
Die 2 sagt dir, dass 2 Monate vergangen sind ( 2 x 30 Tage )
Die 8 sagt dir, dass noch 8 Tage zusätzlich vergangen sind.
2 x 30 + 8 = 68
-
in etwa so:
int tage=4567890; int monate = tage/30; int rest_tage = tage%30; float zinssatz = 3.f; float geld = 567890.f; float einazhlung = 234.f; for (int i=0; i < monate; i++) { geld = geld/100.f*zinssatz*30 + geld + einzahlung; } geld = geld/100.f*zinssatz*rest_tage + geld + einzahlung;bb
PS:
89.f == 89.0f -> 89 als float-wert.der vollständigkeit halber:
#include <cstdlib> //std::size_t typedef std::size_t Ttage_anz; typedef std::size_t Tmonate_anz; typedef float Tgeld; typedef float Tzinssatz; const Ttage_anz tage_pro_monat = 30; //------------------------------------------------------ Ttage_anz tage=4567890; Tmonate_anz monate = tage/tage_pro_monat; Tzinssatz zinssatz = 3.f; Tgeld geld = 567890.f; Tgeld einazhlung = 234.f; for (Tmonate_anz i=0; i < monate; ++i) { geld += geld/100.f*zinssatz*tage_pro_monat + einzahlung; } Ttage_anz rest_tage = tage%tage_pro_monat; geld += geld/100.f*zinssatz*rest_tage + einzahlung;
-
DANKE AN ALLE
