Neu bei C++ --- Problem bei einem Zinseszins Programm.
-
Hi!
Ich bin noch neu bei c++ und habe mich mal rangewagt mein erstes eigenes Programm zu schreiben. Und...natürlich funktioniert es nicht
Hier ist es:
// zinseszins.cpp : // #include "stdafx.h" int jahrequadrieren; int schleife; int zwischenrechnung; int zinssatz; int jahre; int endkapital; int anfangskapital; int exponieren (int jahre) { zinssatz = 5; jahrequadrieren = (1 + zinssatz / 100); zwischenrechnung = (1 + zinssatz / 100); for (schleife=1; schleife <= 100; schleife++) { jahrequadrieren = jahrequadrieren * zwischenrechnung; } return (jahrequadrieren); } int main() { anfangskapital = 1000; jahre = 100; endkapital = anfangskapital * exponieren(jahre) ; printf("%d", endkapital); getchar(); return 0; }wenn ich es ausfürhe kommt als ausgabe
1000
ich hoffe ihr könnt mir helfen.
gruß the-baboon
-
Was machst du mit int Jahre in der exponieren Funktion?
MfG f.-th.
-
achso... müsste so aussehen:
// zinseszins.cpp : // #include "stdafx.h" int jahrequadrieren; int schleife; int zwischenrechnung; int zinssatz; int jahre; int endkapital; int anfangskapital; int exponieren (int jahre) { zinssatz = 5; jahrequadrieren = (1 + zinssatz / 100); zwischenrechnung = (1 + zinssatz / 100); for (schleife=1; schleife <= 100; schleife++) { jahrequadrieren = jahrequadrieren * zwischenrechnung; } return (jahrequadrieren); } int main() { anfangskapital = 1000; jahre = 100; endkapital = anfangskapital * exponieren(jahre) ; printf("%d", endkapital); getchar(); return 0; }ist aber immernoch der selbe fehler
-
Und immer noch der selbe Code ^^
-
Eigentlich könnte es so aussehen:
#include <iostream> // Für Ein- und Ausgabe #include <cmath> // Für mathematische Funktionen using namespace std; int main(int argc, char** args) { // (Die Funktionen aus cmath verlangen double-Werte) double anfangskapital = 1000.0; double zinssatz = 1.05; double laufzeit = 5.0; // In Jahren cout << "Anfangskapital :" << anfangskapital << endl; cout << "Zinsatz :" << zinssatz << endl; cout << "Laufzeit :" << laufzeit << endl; cout << "Endkapital :" << anfangskapital * pow(zinssatz, laufzeit) << endl; return 0; }Nachteilig an der ganzen Sache ist natürlich, dass Fließkommaoperationen, ungenau rechnen.
Zu deinem Quelltext:
Vermeide nach Möglichkeit globale Variablen. Deklariere oder definiere sie dort, wo du sie auch benötigst.
Deiner Exponieren-Funktion solltest du alle nötigen Werte als Parameter mitgeben. Man sieht der Funktion von außen ja nicht an, dass sie a) globale Variablen verwendet und b) diese auch noch verändert.
Statt printf (C) solltest du cout (C++) verwenden.
Und was ist eigentlich diese stdafx.h?
Grüße...
Heiko
EDIT: Nachgelegt:
Mir ist gerade aufgefallen, dass du Ganzzahlen dividieren willst. Das ist etwas Problematisch, da bei einer Ganzzahldivision auch eben nur wieder eine Ganzzahl herauskommen kann:
5 / 100 == 0.05 => 0
In diesem Fall rechnest du mit 0 weiter statt mit 0.05, was zwansläufig zu ungewünschten Ergebnissen führt.
-
stdafx.h ist MS VC

-
Genau, und damit du ein genaueres Ergebnis bekommst, brauchst du nur einen Operanden umwandeln:
(double)5 / 100;
oder
5. / 100;
Der andere Operand wird dann für den Rechenschritt implizit nach double konvertiert.
Wo wir schon bei implizit sind:
Was habt ihr alle mit eurem grausigen int argc, char** args und return 0;
-
Die Parameterliste von int main habe ich mir so angewöhnt. Man kann es auch weglassen, es werden kann keine Kommandozeilenparameter verarbeitet.
Was das return betrifft: "Explicit is better than implicit"
Daher sollte man statt (double)foo besser static_cast<double>(foo) verwenden. Oder eben gleich auf Datentypen mit einer höheren Genauigkeit setzen.
Grüße...
Heiko
-
ceplusplus@loggedoff schrieb:
Genau, und damit du ein genaueres Ergebnis bekommst, brauchst du nur einen Operanden umwandeln:
(double)5 / 100;
oder
5. / 100;
Was in dem Beispiel auch nicht viel am Ergebnis ändert - (int)(1+5/100.0) ist immer noch 1.