Zinsen - mit Ergebnis weiter rechnen



  • Hallo Leute,

    da ich gerade am verzweifeln bin dachte ich mir, ich melde mich hier mal an und hoffe das Ihr mir helfen könnt 😃
    Ich bin noch sehr neu auf dem Gebiet C++ habe vorgestern das Programmieren angefangen und mache gerade Übungsaufgaben aus dem Internet durch.

    Meine Aufgabe lautet: Schreiben Sie ein Programm ZINS, welches die Entwicklung eines Kapitals einschließlich Zinsen
    für einen beliebigen Zeitraum berechnet.

    Soweit so gut.
    Ich bin auch fast fertig nur schaffe ich es einfach nicht das er mir auf Jahr 2 einen anderen Wert drauf rechnet.
    Er zeigt mir dauernd den selben.
    Kurzeitig hatte ich es mal soweit das er andere Werte drauf rechnet die waren aber schwachsinn da war dann immer das Kapital zu viel drauf.
    Wenn ich dann - Kapital gemacht habe hatte ich beim ersten Jahr nur 30€ bei 3% Zins anstatt 1030:D

    Ich hab mir gedacht man kann das ganze mit 2 For Schleifen probieren nur leider speichert er mir den Wert für das Kapital nicht sondern lässt die Schleife einfach über den Standard Wert laufen:D
    Das Internet hab ich schon durchforstet und probiere das ganze jetzt schon seit 4 Stunden 😞

    Schon mal Vielen Dank im voraus für die Hilfe euer BadAng3lDoM

    Folgend werde ich euch mal den Code posten :

    #include <iostream>
    using namespace std;
    
    double Kapital;
    double Zins;
    double Laufzeit;
    double Jahre;
    
    int main(void)
    {
    cout << "Bitte geben Sie ihr Kaptial in Euro ein: ";
    cin >> Kapital;
    cout << endl << endl;
    
    cout << "Bitte geben Sie ihren Zinssatz in % ein: ";
    cin >> Zins;
    cout << endl << endl;
    
    cout << "Bitte geben Sie ihre Laufzeitlaenge in Jahre ein: ";
    cin >> Laufzeit;
    cout << endl << endl;
    
    for(Jahre=1; Jahre <= Laufzeit; Jahre++)
    cout << "Jahr " << Jahre << " " << "\t\t" << Kapital << " Euro" << endl;
    {
    for (Jahre; Jahre <=Laufzeit; Kapital*(1+ Zins/100))
    ;
    }
    cin.get();
    return 0;
    }
    


  • Du musst in der Schleife, der Variablen Kapital den neu berechneten Wert zuweisen.

    Für abzählbare Werte (wie die Jahre) niummt man Ganzzahlige Typen wie int

    Registriert bist du aber nicht.



  • Wofür möchtest du da 2 for-Schleifen haben? Eine reicht doch aus:

    für jedes Jahr:
       setze Kapital auf Kapital + Zinsen;
       gib Kapital aus;
    

    Alternativ könntest du natürlich auch direkt berechnen, wie groß das Kapital am Ende der Laufzeit ist:

    Kapital = Kapital * std::pow(1 + Zinssatz/100., AnzahlJahre);
    

    std::pow findest du in <cmath> .

    Da du ja gerade übst, hätte ich eine Bonusaufgabe für dich: Nimm an, du hast irgendeinen krummen Betrag, z.B. 1234,56€. Verzinse n Jahre lang so, dass nach jedem Jahr auf einen Cent gerundet wird.



  • Ja das mit dem registrieren ist doof gelaufen 😃
    habe mich registriert aber vorm Verfassen nicht angemeldet xD

    So sieht das ganze nicht schlecht aus :

    for(Jahre=1; Jahre <= Laufzeit; Jahre++)
    {
    Kapital = Kapital*(1 + Zins/100);
    cout << "Jahr " << Jahre << " " << "\t\t" << Kapital << " Euro" << endl;
    }
    

    Leute ich habs endlich 🙄

    Mfg BadAng3lDoM


  • Mod

    Zum Körper einer for-Schleife gehört nur die nächste Anweisung bzw. Anweisungsblock. Möchtest du mehrere Anweisungen in der for-Schleife ausführen, musst du also einen neuen Block dafür aufmachen.

    for(...)
    {
      Anweisung 1;
      Anweisung 2;
    }
    


  • Jetzt hab ich hier schon das nächste Problem 😕

    Die nächste Aufgabe baut nun auf die letzte Aufgabe auf!

    In der Aufgabe heißt es:
    Schreiben Sie das Programm Zins so, dass lediglich der Endwert des Kapitals nach "eingegebenen" Jahren angezeigt wird.
    Die Berechnung soll solange wiederholt werden, bis der Benutzer das Programm abbricht.

    Ich hab das jetzt so verstanden das wenn der Benutzer sagt er will den Zins für 12 Jahre haben das es ihm die 12 Jahre anzeigt aber erst aufhört zu rechnen wenn er es abbricht.

    Nun so weit so gut ich habs geschafft das es sich durchgängig wiederholt und auch bei einer bestimmten Taste abbricht.

    Nur leider bekomm ich den Start Wert des Kapitals nicht mehr hin sobald er die Schleife neustartet.
    Also genau das gegenteil von meinem Problem vorher 😮

    Er rechnet mir also bei sagen wir 12 Jahren den Zins für die 12 Jahre gut aus aber dann wiederholt sich das ganze und bei Jahr 1 steht dann die Zahl von dem nicht vorhandenen Jahr 13!

    Hier nochmal der Code:

    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    using namespace std;
    
    double Kapital;
    double Zins;
    double Laufzeit;
    double Ergebnis;
    int Jahre;
    void Berechnung();
    char Ende;
    
    int main(void)
    {
    cout << "Hinweis: Kommazahlen bitte durch einen Punkt trennen!" << endl << endl;
    cout << "Zum Beenden bitte die <E> Taste druecken!" << endl << endl;
    cout << "Bitte geben Sie ihr Kaptial in Euro ein: ";
    cin >> Kapital;
    cout << endl << endl;
    
    cout << "Bitte geben Sie ihren Zinssatz in % ein: ";
    cin >> Zins;
    cout << endl << endl;
    
    cout << "Bitte geben Sie ihre Laufzeitlaenge in Jahre ein: ";
    cin >> Laufzeit;
    cout << endl << endl;
    
    Berechnung();
    
    cin.get();
    return 0;
    }
    
    void Berechnung()
    {
    do
    {
    for(Jahre=1; Jahre <= Laufzeit; Jahre++)
    {
    Kapital = Kapital*(1 + Zins/100);
    Ergebnis = Kapital*(1 + Zins/100);
    cout << "Jahr " << Jahre << "\t\t" << Ergebnis << "\t Euro" << endl;
    }
    if(Jahre >= Laufzeit)
    {
    
    cout << endl << endl;
    }
    }
    while(GetKeyState(0x45)>=0);
    cout << "Das Programm wurde gestoppt!" << endl;
    cin.get();
    }
    

    Mfg BadAng3lDoM


  • Mod

    Das klingt mir eher so, als solle gar keine Laufzeit mehr angegeben werden. Es wird einfach ein Jahr nach dem anderen angezeigt, jeweils auf eine Eingabe gewartet, und ggf. abgebrochen, ansonsten das nächste Jahr.



  • Kann ich mir fast nicht vorstellen das wäre ja extrem easy für das was davor war 😃

    Dann muss ja nur immer ein cin.get() zwischen die einzelnen Jahre.

    "dass lediglich der Endwert des Kapitals nach "?" Jahren angezeigt wird."
    Heißt für mich nur das letzte Angegeben Jahr anzeigen. Das heißt wenn er 12 eingibt soll es nur 12 zeigen.

    "Die Berechnung soll solange wiederholt werden, bis der Benutzer das Programm abbricht."

    Heißt für mich alle werte so lange vor rechnen bis der Benutzer das rechnen abbricht.

    Sind ja sowieso keine Musterlösungen dabei ist ja nur das ich was lerne ^^
    Ich bin jetzt halt hier auf eine Stelle gestoßen die ich nicht kann also kann ich ja was daraus lernen ob die Aufgabe das will oder nicht ist in dem Fall ja mal egal 😃 😃

    Mfg BadAng3lDoM



  • BadAng3lDoM schrieb:

    In der Aufgabe heißt es:
    Schreiben Sie das Programm Zins so, dass lediglich der Endwert des Kapitals nach "eingegebenen" Jahren angezeigt wird.
    Die Berechnung soll solange wiederholt werden, bis der Benutzer das Programm abbricht.

    Ich hab das jetzt so verstanden das wenn der Benutzer sagt er will den Zins für 12 Jahre haben das es ihm die 12 Jahre anzeigt aber erst aufhört zu rechnen wenn er es abbricht.

    Naja, ich würds eher so verstehen, dass der Benutzer die 3 Zahlen eingibt, das Programm dann nur ausgibt, wie viel am Ende der Laufzeit insgesamt an Geld da ist (also nicht die Jahre dazwischen).

    Danach fragt es den Benutzer wieder nach neuen Eingabedaten und berechnet das Endergebnis etc etc - solange, bis das Programm beendet wird.

    Wenn man die Aufgabe wörtlich nimmt, "Wiederhole die Berechnung" (aber nicht die Eingabe), wäre das doch kompletter Blödsinn.

    Zu deinem Code:
    0. Rücke deinen Code anständig ein!
    1. Verzichte auf conio.h und windows.h, dann kann das hier jeder nachvollziehen!
    2. Du kannst checken, ob eine Eingabe keine Zahl war, indem du einfach nach dem cin >> zahlVariable; abfragst, ob cin noch true ist: if (!cin) cout << "Keine Zahl eingegeben oder irgendwas anderes kaputt";
    3. Benutze KEINE, 0, GAR KEINE, NULL globale Variablen!!!!eins11!!
    4. Übergib stattdessen deiner Berechnen-Funktion die drei Parameter Startkapital, Laufzeit und Zinssatz und gib aus dieser Funktion die Endkapital zurück.
    6. das void in den Klammern von int main() ist komplett überflüssig

    Pseudocode (so oder ähnlich - zur Kontrolle der Eingabe kann man sich auch mehr Mühe geben als ich hier...):

    double kapitalNachZinsen(double startkapital, double zinssatz, int laufzeit) {
    ...
    }
    
    int main() {
       while (true) {
          double kap, zins;
          int y;
          lies daten ein;
          if (!eingabe_erfolgreich) break;
          auto nachZinsen = kapitalNachZinsen(kap, zins, y);
          cout << "Nach " << y << " Jahren haben wir " << nachZinsen << " EUR.\n";
       }
    }
    


  • wob schrieb:

    Naja, ich würds eher so verstehen, dass der Benutzer die 3 Zahlen eingibt, das Programm dann nur ausgibt, wie viel am Ende der Laufzeit insgesamt an Geld da ist (also nicht die Jahre dazwischen).

    So hatte ich es am Anfang bekomme ich auch wieder hin 🙂

    wob schrieb:

    Danach fragt es den Benutzer wieder nach neuen Eingabedaten und berechnet das Endergebnis etc etc - solange, bis das Programm beendet wird.

    Ahh das klingt logisch 😃
    also logischer als dauernd die selben Zahlen zu zeigen 🤡

    wob schrieb:

    0. Rücke deinen Code anständig ein!

    Was meinst du damit ?
    Hab ich es falsch strukturiert? Ich finde es halt sehr übersichtlich wenn alles vorne anfängt und die Klammern über dem Befehl stehen nicht davor 😃

    wob schrieb:

    1. Verzichte auf conio.h und windows.h, dann kann das hier jeder nachvollziehen!

    Diie Windows.h brauche ich doch aber für die (GetKeyState(0x45)>=0)
    die conio.h kann raus hatte ich vorher drin für einen Versuch mit cin.getch()

    wob schrieb:

    2. Du kannst checken, ob eine Eingabe keine Zahl war, indem du einfach nach dem cin >> zahlVariable; abfragst, ob cin noch true ist: if (!cin) cout << "Keine Zahl eingegeben oder irgendwas anderes kaputt";

    Das klingt ja mal interessant 😮 das heißt ich gebe einfach ein "cin >> ZahlVariable" oder "cin >> Zahl(!cin) und es überprüft mir ob es auch ein sagen wir mal Integer ist ?
    Hatte nämlich in einer Übung am Anfang sowas hab das dann mit If gemacht.
    Also bei else ein Zähler eingebaut der sagt sobald else kommt Zähler = 1 und dadurch wurde die While schleife wiederholt.

    wob schrieb:

    3. Benutze KEINE, 0, GAR KEINE, NULL globale Variablen!!!!eins11!!

    😕 😕 Ich versteh nich was du mir damit sagen willst 😮

    wob schrieb:

    4. Übergib stattdessen deiner Berechnen-Funktion die drei Parameter Startkapital, Laufzeit und Zinssatz und gib aus dieser Funktion die Endkapital zurück.

    Die 3 Parameter übergeben tu ich ja aber wie geb ich einen anderen Wert zurück?

    wob schrieb:

    6. das void in den Klammern von int main() ist komplett überflüssig

    Du hast die 5 vergessen haha 🙄
    Spaß bei seite das mit dem void hab ich in den Videos gesehen bei OrangeOnBlack ist ein YouTube Kanal mit einem C++ Crashkurs in 2 Stunden damit habe ich angefangen weil ich das gut erklärt fande.
    Er hat das immer hin geschrieben deswegen dachte ich mir das ist standard.
    kannst du mir den Unterschied erklären?

    Mfg BadAng3lDoM



  • BadAng3lDoM schrieb:

    wob schrieb:

    0. Rücke deinen Code anständig ein!

    Was meinst du damit ?
    Hab ich es falsch strukturiert? Ich finde es halt sehr übersichtlich wenn alles vorne anfängt

    Das ist aber nicht übersichtlich, wenn alles links anfängt. Auf jeden Fall solltest du so Blöcke einrücken. Wie genau, das bleibt dir überlassen, aber mach es konsistent, siehe z.B. https://de.wikipedia.org/wiki/Einrückungsstil

    wob schrieb:

    1. Verzichte auf conio.h und windows.h, dann kann das hier jeder nachvollziehen!

    Diie Windows.h brauche ich doch aber für die (GetKeyState(0x45)>=0)
    die conio.h kann raus hatte ich vorher drin für einen Versuch mit cin.getch()

    Dieses Forum heißt "C++ (alle ISO-Standards)" und die genannten Header gibt es nicht in ISO-C++, sie sind Windows-spezifisch. Ich habe kein Windows und kann daher deine Programme nicht testen, wenn du windows.h oder conio.h includest. Du kannst sie natürlich dennoch verwenden, nur sei dir bewusst, dass dein Programm dann ausschließlich unter Windows läuft.

    wob schrieb:

    2. Du kannst checken, ob eine Eingabe keine Zahl war, indem du einfach nach dem cin >> zahlVariable; abfragst, ob cin noch true ist: if (!cin) cout << "Keine Zahl eingegeben oder irgendwas anderes kaputt";

    Das klingt ja mal interessant 😮 das heißt ich gebe einfach ein "cin >> ZahlVariable" oder "cin >> Zahl(!cin) und es überprüft mir ob es auch ein sagen wir mal Integer ist ?

    Erstens hab ich das mal etwas verkürzt geschrieben (such hier im Forum mal nach Posts von Werner Salomon, der hat viel zu Eingabeparsing gepostet) und zweitens was soll cin >> Zahl(!cin) sein? Eher so:

    double zahl;
    cin >> zahl;
    if (!cin) {
      eingabe hat nicht geklappt;
      achtung: cin nun im Fehler-Status, muss gecleart werden vor Weiterverwendung;
    }
    

    Siehe auch ios::clear. Nimm ein Buch und lies nach / probiere aus. Tipp: probiere doch mal, 4.4 in einen int zu lesen und schaue danach nach, ob noch irgendwas in cin drin ist, also z.B.

    int i; cin >> i;
    string s; cin >> s;
    cout << "int ist: " << i << " und danach kommt noch " << s << '\n';
    

    Mit getline kannst du alles bis zum Enter auf einmal in einen String lesen. Dann könntest du testen, ob er == "e" ist und wenn nicht mit stoi in einen int konvertieren.

    wob schrieb:

    3. Benutze KEINE, 0, GAR KEINE, NULL globale Variablen!!!!eins11!!

    😕 😕 Ich versteh nich was du mir damit sagen willst 😮

    Du hast folgende GLOBALE Variablen in deinem Programm:

    double Kapital;
    double Zins;
    double Laufzeit;
    double Ergebnis;
    int Jahre;
    char Ende;
    

    Keine davon sollte global sein! Definiere Variablen nur da, wo du sie brauchst.

    wob schrieb:

    4. Übergib stattdessen deiner Berechnen-Funktion die drei Parameter Startkapital, Laufzeit und Zinssatz und gib aus dieser Funktion die Endkapital zurück.

    Die 3 Parameter übergeben tu ich ja aber wie geb ich einen anderen Wert zurück?

    Nein, tust du nicht. Du übergibst 0 Parameter! Stattdessen verwendest du globale Variablen. Das ist böse.
    Rückgabe geht mit return . Lies bitte irgendwo nach, wie Parameterübergabe an Funktionen geht, ich hab keine Zeit alles zu erklären.

    wob schrieb:

    6. das void in den Klammern von int main() ist komplett überflüssig

    Du hast die 5 vergessen haha 🙄
    Spaß bei seite das mit dem void hab ich in den Videos gesehen [...]
    Er hat das immer hin geschrieben deswegen dachte ich mir das ist standard.
    kannst du mir den Unterschied erklären?

    Mit der 5: gut aufgepasst!
    Der Unterschied: der Code mit void ist 4 Buchstaben länger.



  • wob schrieb:

    Dieses Forum heißt "C++ (alle ISO-Standards)" und die genannten Header gibt es nicht in ISO-C++, sie sind Windows-spezifisch. Ich habe kein Windows und kann daher deine Programme nicht testen, wenn du windows.h oder conio.h includest. Du kannst sie natürlich dennoch verwenden, nur sei dir bewusst, dass dein Programm dann ausschließlich unter Windows läuft.

    Tut mir leid dann werde ich mir wohl andere Befehle suchen müssen ^^

    wob schrieb:

    ]
    Mit getline kannst du alles bis zum Enter auf einmal in einen String lesen. Dann könntest du testen, ob er == "e" ist und wenn nicht mit stoi in einen int konvertieren.

    Das klingt doch mal super, werde ich aufjedenfall ausprobieren.

    wob schrieb:

    Du hast folgende GLOBALE Variablen in deinem Programm:

    double Kapital;
    double Zins;
    double Laufzeit;
    double Ergebnis;
    int Jahre;
    char Ende;
    

    Keine davon sollte global sein! Definiere Variablen nur da, wo du sie brauchst.

    Jetzt hab ich es verstanden 🙂
    Dachte nur ich mach das ganz oben falls ich die dinger in einer anderen Funktion noch verwenden muss dann muss ich sie nicht immer neu deklarieren bzw andere Namen geben.

    wob schrieb:

    Nein, tust du nicht. Du übergibst 0 Parameter! Stattdessen verwendest du globale Variablen. Das ist böse.
    Rückgabe geht mit return . Lies bitte irgendwo nach, wie Parameterübergabe an Funktionen geht, ich hab keine Zeit alles zu erklären.
    [/quote]
    Das heißt um ein Parameter übergeben zu müssen, muss ich diese in der Funktion deklarieren nicht Global.
    Das mit dem Return 0; in einer eigenen Funktion hab ich mal probiert um wieder in die Main zu springen da kam mir ein Fehler.

    wob schrieb:

    Der Unterschied: der Code mit void ist 4 Buchstaben länger.

    und das ist der einzige Unterschied?
    void sagt doch nur aus das es eine Funktion ist oder?
    machen die 4 Buchstaben echt so viel aus 😮

    Mir ist auch eben aufgefallen ich hab die Aufgabe 12 übersprungen und die ist meiner Meinung nach noch heftiger als die danach ...

    Die Aufgabe lautet:
    Erstellen Sie ein C++ Programm welches eine Handelskalkulation durchführt.
    Die Bildschirmausgabe des Ergebnisses soll folgendermaßen aussehen: Eingabebildschirm links Ausgabebildschirm rechts als Tabelle.
    Hinweise:
    Die Ausgabe soll mit 2 NK-Stellen rechtsbündig formatiert werden. Außerdem soll die Bezeichnung EUR hinter den Beträgen stehen.
    Entwickeln Sie das Programm schrittweise. Testen Sie erst die Eingabe, dann schrittweise die Ausgabe mit den Berechnungen.
    Formatierungen am besten erst am Ende, wenn die Logik stimmt.
    Verwenden Sie die Manipulatoren aus der Bibliothek iomanip.h.

    Ich verzweifel jetzt schon am Anfang und zwar soll das ganze 2 Tabellen nebeneinander darstellen.
    Links die Eingabe rechts die Ausgabe (ist ein Bild auf der Website bei der Aufgabe dabei)
    jetzt hab ich das ganze mit cout.width und right gemacht.
    Doof ist nur man muss bei jedem Satz mit width eine andere Zahl eingeben sehr aufwendig warum reicht es nicht das ganze einfach rechtsbündig zu machen?

    Ich Poste euch nochmal den Code und nicht aufregen weil die Variablen wieder global deklariert werden das hatte ich vorgestern schon gemacht die Aufgabe abgespeichert und übersprungen.
    Also es ist noch nicht viel gemacht nur die cout und cin die Mathe aufgaben mache ich danach.
    Würde nur gerne mal wissen wie ich die unteren cout oben neben die ersten cout bekomme.
    Im Internet steht was von gotoxy aber auch wiederum dass das schlechtes C++ ist und man das nicht macht ^^

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    float listenp;  // Listenpreis              Eingabe
    float rabatt;   // Rabattsatz               Eingabe
    float skonto;   // Skontosatz               Eingabe
    float bk;       // Bezugskosten             Eingabe
    float hks;      // Handlungskostensatz      Eingabe
    float gkz;      // Gewinnzuschlag           Eingabe
    float zek;      // Zieleinkaufspreis        Berechnung
    float bek;      // Bareinkaufspreis         Berechnung
    float bp;       // Bezugspreis              Berechnung
    float hk;       // Handlungskosten          Berechnung
    float sk;       // Selbstkostenpreis        Berechnung
    float gw;       // Gewinn                   Berechnung
    float nvk;      // Barverkaufspreis         Berechnung
    float mw;       // Mehrwertsteuer           Berechnung
    float bvk;      // Bruttoverkaufspreis      Berechnung
    
    int main(void)
    {
    cout << left << "Listenpreis: ";
    cin >> listenp;
    cout << left << "Rabatt (in %): ";
    cin >> rabatt;
    cout << left << "Skonto (in %): ";
    cin >> skonto;
    cout << left << "Bezugskosten: ";
    cin >> bk;
    cout << left << "Handlungskostensatz (in %): ";
    cin >> hks;
    cout << left << "Gewinnzuschlag (in %): ";
    cin >> gkz;
    cout.width(320);cout << right << "Listeneinkaufspreis: ";
    cout.width(107);cout << right << "Rabatt: ";
    cout.width(131);cout << right << "Zieleinkaufspreis: ";
    cout.width(109);cout << right << "Skonto: ";
    cout.width(130);cout << right << "Bareinkaufspreis: ";
    cout.width(116);cout << right << "Bezugskosten: ";
    cout.width(119);cout << right << "Bezugspreis: ";
    cout.width(124);cout << right << "Handlungskosten: ";
    cout.width(122);cout << right << "Selbstkostenpreis: ";
    cout.width(109);cout << right << "Gewinn: ";
    cout.width(130);cout << right << "Barverkaufspreis: ";
    cout.width(125);cout << right << "Mehrwertssteuer (19%): ";
    cout.width(118);cout << right << "Bruttoverkaufspreis: ";
    cin.get();
    return 0;
    }
    

    Mfg BadAng3lDoM



  • Bei C gibt es einen wichtigen Unterschied, aber in C++ nicht (und daher verwendet man für parameterlose Funktionen einfach leere Klammern).

    Bei C unterscheidet man zwischen parameterlosen Funktionen (void) und Funktionen mit unspezifizierter Anzahl von Parametern (), s.a. Understanding the difference between f() and f(void) in C and C++ once and for all und is f(void) deprecated in modern C and C++.

    Ob dies so genau noch für C99 bzw C11 gilt, kann ich nicht sagen, aber () ist auf jedem Fall ein Relikt aus dem ursprünglichen K&R C.



  • Vielen Dank dann werde ich das nun ohne das void machen 🙂
    wieder was gelernt ^^

    Hier hab ich jetzt noch den fertigen Code für die nächste Aufgabe!

    Eingabe -> Letztes Jahr wird gezeigt -> Es wird nach Neustart gefragt -> wenn Ja mit neuer Eingabe wiederholen -> wenn nein Beenden.

    #include <iostream>
    #include <conio.h>
    #include <windows.h>
    using namespace std;
    
    char Auswahl;
    void Berechnung();
    
    int main(void)
    {
    do
    {
    double Kapital;
    double Zins;
    double Laufzeit;
    
    system("cls");
    cout << "Hinweis: Kommazahlen bitte durch einen Punkt trennen!" << endl << endl;
    cout << "Bitte geben Sie ihr Kaptial in Euro ein: ";
    cin >> Kapital;
    cout << endl << endl;
    
    cout << "Bitte geben Sie ihren Zinssatz in % ein: ";
    cin >> Zins;
    cout << endl << endl;
    
    cout << "Bitte geben Sie ihre Laufzeitlaenge in Jahre ein: ";
    cin >> Laufzeit;
    cout << endl << endl;
    
    Berechnung();
    }
    while(Auswahl);
    cin.get();
    return 0;
    }
    
    void Berechnung()
    {
    double Kapital;
    double Zins;
    double Laufzeit;
    
    for(int Jahre=1; Jahre <= Laufzeit; Jahre++)
    {
    Kapital = Kapital*(1 + Zins/100);
    if(Jahre >= Laufzeit)
    {
    cout << "Jahr " << Jahre << "\t\t" << Kapital << "\t Euro" << endl << endl << endl;
    }
    }
    cout << "Zum Beenden bitte eine beliebige Taste druecken!" << endl;
    cout << "Um erneut zu rechnen bitte die <N> Taste druecken!" << endl;
    
    Auswahl = _getch();
    switch(Auswahl)
    {
    case 'N':
    case 'n':
    break;
    
    default:
    cout << endl << endl;
    cout << "Das Programm wird beendet!" << endl;
    exit(0);;
    }
    }
    

    Mit den variablen in den einzelnen Funktionen deklarieren ist mir nicht gelungen 😮
    Hab versucht die Char Auswahl in main zu deklarieren dann sagt er mir aber unten in der Funktion Berechnung das Auswahl nicht deklariert ist.
    Die anderen Variablen Kapital, Laufzeit und Zins musste ich zweimal deklarieren einmal in Berechnung und einmal in main deswegen war das global aber es heißt ja das soll ich nicht machen.

    Dann habe ich beim neustart System("cls") was aber in der Bibliothek <Windows.h> ist gibt es da zufällig einen C++ befehl aus der <iostream> ?

    EDIT: 21:02 Uhr:

    Ich bin wohl echt zu blöd für C++ 👎 😞

    Jetzt hab ich hier was mit nem EAN Code ... hab mich in Strings eingelesen und Versuche über [] einzelene Zeichen auszulesen was an sich auch gut funktioniert wenn ich diese aber zusammenrechne kommt totaler dreck raus!

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string EAN;
        int Summe1;
        int Summe2;
        int Gesamt;
        int Differenz;
        int Pruefziffer;
    
        cout << "Bitte geben sie Ihren 13-stelligen EAN-Code ein: ";
        cin >> EAN;
    
        Summe1 = EAN[0] + EAN[1] ;
        cout << Summe1 << endl;
    

    Die EAN Zahl lautet: 4012700963109
    das bedeutet die Erste Zahl EAN[0] ist eine 4 die andere EAN[1] ist eine 0 wenn ich mir die anzeigen lasse funktioniert das super!
    verrechne ich diese miteinander wie oben im Code also EAN[0] + EAN[1] ist das Ergebnis 100 😕 😮 Wie zum teufel kommt das Programm von 4+0 auf 100?

    Ich war komplett fertig mit dem EAN Code am ende sollte die Prüfziffer 9 raus kommen er hat mir dauernd 3 angezeigt.
    mit dem Modolu usw hab ich alles richtig gemacht.

    Dann hab ich mir Summe 1 und Summe 2 mal einzeln anzeigen lassen und anstatt das Ergebnis bei Summe 1 = 19 und bei Summe 2 = 14*3 = 42, kamen da Zahlen insgesamt über 1000 raus und dann ist klar das der Modulu was falsches anzeigt!
    Ich verstehe echt nicht was da geschieht er soll doch nur die einzelnen Zahlen + rechnen! 😡
    Mfg BadAng3lDoM



  • Vielleicht solltest du dir mal zu den Funktionen http://www.cplusplus.com/doc/tutorial/functions/ durchlesen. Oder besser ein Buch deiner Wahl. Wenn du Aufgaben hast, dann hast du doch bestimmt auch irgendwie Lehrmaterial dazu?!

    Aber rücke deinen Code bitte wirklich ein! Bei deinem Code erkennt man nicht leicht, welche { zu welcher } gehört. Und das ist wichtig!
    Ich versuche das jetzt mal zu erzwingen, indem ich nicht weiter antworte, wenn du nicht in Zukunft einrückst. 😡

    Funktionen sollten immer nur eine Sache tun. Dein Berechnung() tut gleich 3 Dinge auf einmal:
    1. Berechnen der Zinsen
    2. Ausgabe des Ergebnisses
    3. Benutzer nach weiterer Aktion fragen.

    Außerdem übergib bitte Kapital, Zins und Laufzeit als Parameter (lies den Link oben aus diesem Posting!)



  • BadAng3lDoM schrieb:

    Die EAN Zahl lautet: 4012700963109
    das bedeutet die Erste Zahl EAN[0] ist eine 4 die andere EAN[1] ist eine 0 wenn ich mir die anzeigen lasse funktioniert das super!
    verrechne ich diese miteinander wie oben im Code also EAN[0] + EAN[1] ist das Ergebnis 100 😕 😮 Wie zum teufel kommt das Programm von 4+0 auf 100?

    Willst du nicht erstmal eins richtig lernen und verstehen, bevor du gleich mit dem nächsten Problem anfängst?!

    Das Zeichen '0' ist etwas anderes als die Zahl 0. Das Zeichen '4' ist etwas anderes als die Zahl 4. Schau mal auf https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle.

    Lösung: subtrahiere jeweils '0' von dem Zeichen, um daraus eine Zahl zu bekommen.

    Summe1 = (EAN[0] - '0') + (EAN[1] - '0');
    


  • wob schrieb:

    Vielleicht solltest du dir mal zu den Funktionen
    Oder besser ein Buch deiner Wahl. Wenn du Aufgaben hast, dann hast du doch bestimmt auch irgendwie Lehrmaterial dazu?!

    Nein es sind Aufgaben aus dem Internet http://www.pellatz.de/downloads/c_aufgaben.pdf

    Mein Buch kommt leider erst morgen hab mir das C++ Buch von Breymann bestellt.



  • wob schrieb:

    Aber rücke deinen Code bitte wirklich ein! Bei deinem Code erkennt man nicht leicht, welche { zu welcher } gehört. Und das ist wichtig!
    Ich versuche das jetzt mal zu erzwingen, indem ich nicht weiter antworte, wenn du nicht in Zukunft einrückst. 😡

    Ich hab das ganze jetzt mal nach dem es funktionierte von Codeblocks mit dem vorinstallierten Plugin eingerückt ich hoffe du bist so zufrieden ^^

    Zu dem Code unten mein Bruder meinte sie haben das mit dem Code anders gelernt jetzt mal auf die Stelle mit dem If bezogen, er meinte da muss es noch eine andere Lösung gebenwas fällt euch denn dazu ein ?
    Wenn nämlich Modolu 0 ist zeigt er mir 10 an deswegen habe ich diese If Verzweigung eingefügt!

    Mfg BadAng3lDoM

    int main()
    {
        string EAN;
        int Summe1;
        int Summe2;
        int Gesamt;
        int Differenz;
        int Pruefziffer;
        cout << "Bitte geben sie Ihren 12-stelligen EAN-Code ein: " ;
        cin >> EAN;
        cout << endl << endl;
        Summe1 = (EAN[0] - '0') + (EAN[2] - '0') + (EAN[4] - '0') + (EAN[6] - '0') + (EAN[8] - '0') + (EAN[10] - '0');
        Summe2 = (EAN[1] - '0') + (EAN[3] - '0') + (EAN[5] - '0') + (EAN[7] - '0') + (EAN[9] - '0') + (EAN[11] - '0');
        Gesamt = (Summe2*3) + Summe1;
        if(Gesamt % 10 == 0)
        {
            Pruefziffer = 0;
        }
        else
        {
            Pruefziffer = 10 - (Gesamt % 10);
        }
        cout << "Ihre Pruefziffer lautet: " << Pruefziffer << endl;
    
    }
    


  • Ich kenne das Buch nicht, aber es wurde hier ja schon empfohlen, daher wird es wohl gut sein 🙂

    Habe mir eben mal deine Aufgaben angeguckt. Ich würde "wegschmeißen" sagen, denn
    - der Autor behauptet, zu jedem C++-Programm gehöre ein Grundgerüst mit "#include <iosteam.h>" (bitte ohne .h), "#include <conio.h>" sowie am Ende "getch"
    - der Autor legt offenbar keinen Wert auf Korrektheit (mehrfach ist in Programmlistings der erste Buchstabe groß, also z.B. Cin statt cin usw, es werden mal typografische und mal normale Anführungszeichen verwendet und manchmal sogar zwei Akzent-Zeichen, float-Zahlen werdem im Quellcode mit Komma als Dezimalseparator getrennt, dafür ist in der Lösung von Aufg 17 der Tausendertrenner=Dezimalseparator='.', ...)
    - der Autor vermischt C und C++ (Aufgabe 14 ist offenbar mal für C gestellt worden)
    - der Autor behauptet, es gäbe ASCII-Zeichen 32 bis 255 (Aufg. 15)

    Gut, der Homepage entnehme ich, dass es kein professioneller Programmierer ist, sondern ein Lehrer. Aber mit http://www.pellatz.de/informatik.htm ist die Disqualifikation dann komplett. Zitat:

    Java ist zwar eine 'abgespeckte' Version von C++, hat aber doch einige Hürden, die mit C++ einfacher zu überspringen sind.

    Mehr muss eigentlich nicht gesagt werden.

    Das Script ist http://www.pellatz.de/downloads/ckurs.pdf ist auch schon gleich in Punkt 1 verkehrt. Während zunächst noch "Die Speicherplatzbelegung der einzelnen Datentypen ist auch abhängig vom verwendeten Compiler." bemerkt wird, scheint das in der folgenden Tabelle schon nicht mehr zu gelten.

    Und dann wird erst <iomanip> gelehrt, bevor es das erste mal ein "if" gibt?!!!

    Und dann sieht zumindest am Anfang alles wie ein C-Kurs aus, bei dem "printf" duch "cout" ersetzt wurde...

    Ergo: wirf das Script weg und lerne aus dem Buch.

    Und zum EAN: ja, Formatierung gefällt.
    Folgendermaßen könnte man es lösen:

    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    int main() {
        cout << "Bitte geben sie Ihren 12-stelligen EAN-Code ein:\n";
        string EAN;
        cin >> EAN;
        if (EAN.size() != 12) {
            cerr << "Fehler: Länge falsch!\n";
            exit(EXIT_FAILURE);
        }
    
        int summe1 = 0;
        int summe2 = 0;
        for (size_t i = 0; i < 6; ++i) {
            summe1 += EAN[2 * i] - '0';
            summe2 += EAN[2 * i + 1] - '0';
        }
        int gesamt = summe1 + 3 * summe2;
    
        // die Summe ist maximal groß, wenn alle Ziffern 9 sind. Dann haben wir
        // 6*9+3*6*9 = 4*6*9 = 24*9 < 240 (wir könnten auch 250, 260, 270, ...
        // nehmen)
        int pruefziffer = (240 - gesamt) % 10;
        cout << "Ihre Prüfziffer lautet: " << pruefziffer << '\n';
    }
    


  • wob schrieb:

    Ich kenne das Buch nicht, aber es wurde hier ja schon empfohlen, daher wird es wohl gut sein 🙂

    Ich freu mich auch schon mega auf morgen dank Amazon Prime 😃
    Dann stürze ich mich mal auf 1000 Seiten Freude :p

    wob schrieb:

    Habe mir eben mal deine Aufgaben angeguckt. Ich würde "wegschmeißen" sagen, denn

    Das habe ich auch gemerkt mit dem Grundgerüst darauf bin ich auch garnicht eingegangen habe ja schon ein bisschen C++ erfahrung vor den Übungen gehabt!
    Ich hab ja nur die Aufgaben gemacht was der Autor schreibt war mir egal ^^

    wob schrieb:

    - der Autor behauptet, es gäbe ASCII-Zeichen 32 bis 255 (Aufg. 15)

    Das war eine Aufgabe die ich direkt übersprungen hab da im Internet stand es gibt nur ASCII-Zeichen bis 127 ^^ Ebenso hab ich Aufgabe 12 und 21 übersprungen einfach vom Verstädnis her.
    Aufgabe 12 wegen der Formatierung das hab ich noch nicht so raus und Aufgabe 21 weil ich bei keiner Bank arbeite die Formeln sind ja mega pervers 😮

    wob schrieb:

    Ergo: wirf das Script weg und lerne aus dem Buch.

    Ab morgen dann ^^ hab nur eine beschäftigung für diese Woche gesucht wenn man Urlaub hat und die Frau auf Reise ist 🤡

    wob schrieb:

    Und zum EAN: ja, Formatierung gefällt.

    Freut mich zu hören 🙄

    Den Code werde ich mir gleich anschauen bis jetzt erstmal herzlichen Dank für alles.

    int Suche = Eingabe.find(" ");
    

    Ich hab hier mal noch was mit einem String und zwar hab ich einen String mit getline(cin,Eingabe) eingelesen.
    ich kann mir die länge ausgeben lassen und auch einzelne Zeichen durch andere ersetzen nur bei den Leerstellen ausgeben hapert es mir 😕

    Wenn ich diesen Code verwende zeigt er mir immer was anderen an.
    Ich habe festgestellt das er mir immer den ersten angegeben Buchstaben als leerstellen sagt das heißt wenn ich ein Satz schreibe wie "Hallo wie geht es dir"
    sagt er mir das ganze hat 5 Leerstellen weil Hallo ja 5 Buchstaben hat.
    was ist daran falsch ?

    Ist diese Bibliothek #include <algorithm> gut ?
    Nicht das es wieder heißt es geht nur unter Windows.
    Wo lese ich denn nach welche Bibliothek für welches Betriebssystem geht?

    ich habe nämlich den folgenden Code mit dieser Bibliothek verwendet:

    replace( Eingabe.begin(), Eingabe.end(), 'e', 'y');
    

    Mfg BadAng3lDoM


Anmelden zum Antworten