Ganz blöde und banale Anfängerfrage
-
Hallo,
Hei, ich mache meine wirklich allerersten Schritte beim Programmieren überhaupt und in dem Buch, das ich bearbeite, wird eine Aufgabe gestellt und die Musterlösung ist leider ohne Kommentar. Ich versuche sie genau nachzuvollziehen.
Das ist ein Programm zur Errechnung von Zinseszins auf eine jährliche Einzahlung von 5000 Euro, Zinssatz 5 %:
#include <iostream>
#include <iomanip>
using namespace std;const int Jahreszahl = 2003;
const int Jahre = 20;
const float Zins = 5;
const float Einzahlung = 5000;int main()
{
float Kapital = Einzahlung;
for (int i=0; i<Jahre; i++)
{
cout << setw(4) << i+Jahreszahl << " - "
<< setw(12)<< Kapital << endl;Kapital += Kapital * Zins / 100 + Einzahlung; // Was passiert genau in //dieser Zeile in Worten ausgedrückt? das ist die Frage.
}
cin.sync();
cin.clear();
cin.get();
}Naja, das wars eigentlich schon. Viele Grüße vom IT-Nachwuchs und Danke!
-
...
-
Swordfish schrieb:
#include <iostream> // Ein- und Ausgabe #include <iomanip> // Formatierung using namespace std; // Namensraum std einbinden // Konstanten const int Jahreszahl = 2003; const int Jahre = 20; const float Zins = 5; const float Einzahlung = 5000; int main() // Hauptfunktion { float Kapital = Einzahlung; // Mehrfache Ausführung des Codes (Schleife) for (int i=0; i<Jahre; i++) { // Ausgabe + Formatierung (mit setw) cout << setw(4) << i+Jahreszahl << " - " << setw(12)<< Kapital << endl; Kapital += Kapital * Zins / 100 + Einzahlung; // Addiere zu Kapital das Kapital mal dem Zins dividiert durch Einhundert, erhöht um die Einzahlung. } // Auf Tastendruck warten cin.sync(); // IMHO überflüssig. cin.clear(); cin.get(); }
-
Hallo und willkommen.
Nutze in Zukunft bitte die C++-Codetags.
Kapital += Kapital * Zins / 100 + Einzahlung;+= bedeutet, dass der Term rechts davon zu der Variable links davon hinzuaddiert wird.
Der gesamte Term lässt sich so übersetzen:Kapital erhöht sich um Kapital mal Zins durch einhundert plus Einzahlung Kapital += Kapital * Zins / 100 + Einzahlung;Würden wir das durchrechnen (beim ersten Durchlauf), wäre es in etwa so:
Kapital += 5000 * 5 / 100 + 5000; //ist gleich wie Kapital += 5000 * 0.05 + 5000;
-
MarcoYolo schrieb:
Kapital += 5000 * 5 / 100 + 5000; //ist gleich wie Kapital += 5000 * 0.05 + 5000;Nichg ganz, das
5000 * 5 / 100 + 5000ist vom Typ int und hat keine Rundungsfehler,5000 * 0.05 + 5000vom Typ float und kann daher Rundungsfehler haben, allerdings auch keine Probleme wie Integerdivision (was Probleme geben würde, wenn 5/100 in Klammern wäre).
-
Dietrich schrieb:
Hei, ich mache meine wirklich allerersten Schritte beim Programmieren überhaupt und in dem Buch, das ich bearbeite, wird eine Aufgabe gestellt und die Musterlösung ist leider ohne Kommentar.
Wenn du in dem Buch nichts darüber finden kannst, was dir hilft, die Musterlösung zu verstehen, dann zweifel ich echt an der Qualität des Buchs. Das ist leider nicht ganz unwahrscheinlich, weil es nicht besonders viele Bücher über C++ gibt, die wirklich etwas taugen.
Aber vielleicht ist das Buch ja auch nicht für Anfänger sondern Umsteiger von einer anderen Sprache mit C-ähnlicher Syntax gedacht und dir fehlt das Wissen über diese "Syntaxfamilie".Dietrich schrieb:
Kapital += Kapital * Zins / 100 + Einzahlung; // Was passiert genau in dieser // Zeile in Worten ausgedrückt?Also die rechte Seite von += sollte klar sein, oder? Und was += macht, kann man ergoogeln, wenn man weißt, wie ein solcher Operator heißt. So ein Gleichzeichen mit 'nem anderen Symbol davor nennt sich im Englischen "compound assignment" oder auch "augmented assignment".
Viel Erfolg!
-
für die netten und erschöpfenden Auskünfte!
Lieber Grüße!
-
Hallo

variable += (variable)
ist äquivalent zu
variable = variable + (variable)Ich würde die erste Schreibweise als "implizit" bezeichnen
und rate jedem C Einsteiger erstmal die zweite "explizite" Schreibweise zu verwenden.Das Problem mit der Impliziten Schreibweise sind Vorrangregeln für Operatoren.
Bei "+=" ist das Ergebnis noch definiert
bei "Variable++" oder "++Variable" ist man schon im Bereich des undefinierten Verhaltens.Im Zweifel würde ich auch wie oben Klammern benutzen.
Hier mal ein Link der das Thema ausführlicher erklärt
http://manderc.manderby.com/operators/operatorprescedence/index.phpViel Spass

-
Krümmelkacker hat vollkommen Recht, schmeiß das Buch über Bord und besorg dir nen anderes. Ein weiterer Indiz für die schlechte Quali des Buches ist hier nämlich die Verwendung von float. Das geht ja ma garnich, das ginge auch in einem fortgeschrittenem Buch nicht.