Zinsenberechnung



  • hey leute.
    ich schrieb ein programm zur berechnung des kapitals nach berechnung der zinsen.
    mit eingabe kapital, zinssatz und dauer in tagen.
    nun wollte ich das programm erweitern, indem man die zeitdauer nicht nur in tagen, sonder auch in monaten und jahren eingeben kann, doch irgendwo hat sich ein fehler eingeschlichen:[linker error] undefined reference to 'main2()'
    ----hier der code----

    #include <iostream>
    using namespace std;
    
    int main()
    {     
    float kapital;
    float zinssatz;
    float dauer; 
    int nochmal;   
    cout<<"Herzlich willkommen zum Zinsberechnungsprogramm! \nBerechnen Sie hier, um wieviel sich ihr Kapital \nin wievielen Tagen erhoeht hat! \n\n\n";
    cout<<"Eingabe des momentanen Kapitals! ";
    cin >>kapital;
    cout<<"\nEingabe des Zinssatzes[ohne %]! ";
    cin >>zinssatz;
    cout<<"\nEingabe der Zeitdauer in \n1) Tagen \n2) Monaten \n3) Jahren \n ";
    void main2();
    {
    cin >>dauer;
        if(dauer==1)
             {
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/36000 +kapital;
             }
        else if(dauer==2)
             {
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/1200 +kapital;
             }
        else if(dauer==3)
             {
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/100 +kapital; 
             }
        else
            {
            cout<<"ungueltig!";
            main2();
            }
    
    cout<<"\n\nWenn Sie nochmals Berechnen wollen, druecken sie die \" 1 \"\nansonsten eine beliebige Zahl! ";
    cin >>nochmal;
                  if(nochmal==1)
                                {
                                cout<<" \n\n\n";           
                                main();
                                }
                  else
                                {
    
        return EXIT_SUCCESS;
    }
    }
    }
    

    wo liegt der fehler?!



  • Erstmal inhaltlich: Du solltest die Angabe von Wert und Einheit (Tage/Monate/Jahre) in getrennte Variablen schreiben. Und zweitens ist es afaik nicht erlaubt, main() direkt aufzurufen - du solltest besser eine Schleife dafür verwenden:

    while(true)
    {
      //einlesen und berechnen
      cin >> nochmal;
      if(nochmal==1)
      {
        cout << "Auf Wiedersehen\n";
        exit;
      }
    }
    


  • 1. Lies Dir in einem C/C++ Buch oder Tutorial Deiner Wahl das Kapitel über Funktionen durch.

    void main2();
    {
    

    lässt sich vermutlich ungewollt kompilieren.
    void main2(); ist eine Deklaration auf eine irgendwo anders definierte Funktion namens main2. Deswegen sucht der Linker sie.
    Du wolltest vermutlich eine neue Funktion an der Stelle beginnen. Das geht nicht. Du bist bereits in einer Funktion. Ansonsten hätte das etwa so ausgesehen:

    void f() // hier kein Semikolon
    {
      // hier Dein Code
    }
    
    int main() // die Hauptroutine
    {
      f(); // der Aufruf von f()
    }
    


  • ich musste das programm sowieso abändern, da es einen fehler hatte.
    doch ich wüsste sonst nicht wie, wenn ich main nicht aufrufen müsste...
    mit der while komme ich nicht so ganz mit...
    aber nun geht´s, da ich main2() gelöscht habe, nun beginnt das programm wieder bei main()
    also was müsste ich schreiben, dass ich main() nicht nochmals aufzurufen benötige?



  • Genau dass was CStoll geschrieben hat.
    Ersetz in Deinem ersten Post, dass void main2() durch while(true) und in der Abfrage für nochmal entferne den Aufruf von main().
    Dann hast Du eine Schleife die solange ausgeführt wird, bis der Benutzer etwas != 1 eingibt.



  • ya okay
    folgendes:
    ich check das einfach nicht so ganz!

    #include <iostream>
    using namespace std;
    
    int main()
    {  
    
    float kapital;
    float zinssatz;
    float choose;
    float dauer;
    int nochmal;   
    cout<<"Herzlich willkommen zum Zinsberechnungsprogramm! \nBerechnen Sie hier, um wieviel sich ihr Kapital \nin wievielen Tagen erhoeht hat! \n\n\n";
    cout<<"Eingabe des momentanen Kapitals! ";
    cin >>kapital;
    cout<<"\nEingabe des Zinssatzes[ohne %]! ";
    cin >>zinssatz;
    while(true)
    {  
    cout<<"\nEingabe der Zeitdauer in \n1) Tagen \n2) Monaten \n3) Jahren \n ";
    cin >>choose;
    
        if(choose==1)
             {
             cout<<"Wieviele Tage? ";        
             cin >>dauer;        
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/36000 +kapital;
             }
        else if(choose==2)
             {
                          cout<<"Wieviele Monate? "; 
                          cin >>dauer;
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/1200 +kapital;
             }
        else if(choose==3)
             {
                          cout<<"Wieviele Jahre? "; 
                          cin >>dauer;
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/100 +kapital; 
             }
        else
        {
        main(); //<------PROBLEM!!!!
    }        
    
    cout<<"\n\nWenn Sie nochmals Berechnen wollen, druecken sie die \" 1 \"\nansonsten eine beliebige Zahl! ";
    cin >>nochmal;
    cout<<" \n\n\n\n\n";
    if(nochmal==1)
      {
                  //an dieser Stelle MUSS ICH DOCH MAIN AUFRUFEN!!!!!
      return 0;
      }
    
    else{
         }
    
         }
    
        return EXIT_SUCCESS;
    }
    


  • int main()
    {  
    char ende;
    char choose;
    /* */
    do // do-while-Schleife beginnt
    {  
    cout<<"\nEingabe der Zeitdauer in \n1) Tagen \n2) Monaten \n3) Jahren \n ";
    cin >>choose; // deine Wahl
        switch (choose){ // Testet deine Wahl
        case '1': cout<<"Wieviele Tage? "; // Wenn du 1 eingibst
                  cin >>dauer;        
                  cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital " << (kapital*zinssatz*dauer)/36000 +kapital;
                  break; // wichtig
        case '2': cout<<"Wieviele Monate? ";  // Wenn du 2 eingibst
                  cin >>dauer;
                  cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital " << (kapital*zinssatz*dauer)/1200 +kapital;
                  break; // wichtig
        case '3': cout<<"Wieviele Jahre? "; //wenn du 3 eingibst
                  cin >>dauer;
                  cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital " << (kapital*zinssatz*dauer)/100 +kapital; 
                  break; // wichtig
        default : // Falls nichts zutrifft
        }    
    
        cout<<"\n\nWenn Sie nochmals Berechnen wollen, druecken sie die \" 1 \"\nansonsten eine beliebige Zahl! ";
        cin >> ende;
        cout<<" \n\n\n\n\n";
    } while (ende == '1'); // wenn du 1 eingibst geht er wieder zu do zurück
        return EXIT_SUCCESS;
    }
    

    Du brauchst die main nicht immer wieder aufzurufen, du packst einfach das, was du wiederholen willst in eine Schleife.



  • ich hab das jetzt seehr lange überarbeitet...
    ich kratz halber ab
    ich dachte ich habs und nun:

    #include <iostream>
    using namespace std;
    
    int main()
    {  
    
    int nochmal=0;      
    
    float kapital;
    float zinssatz;
    float dauer;
    int schleife = 1;
    
    cout<<"Herzlich willkommen zum Zinsberechnungsprogramm! \nBerechnen Sie hier, um wieviel sich ihr Kapital \nin wievielen Tagen erhoeht hat! \n\n\n";
    cout<<"Eingabe des momentanen Kapitals! ";
    cin >>kapital;
    cout<<"\nEingabe des Zinssatzes[ohne %]! ";
    cin >>zinssatz;
    
    while(schleife==1)
    { 
    float choose = 0; 
    cout<<"\nEingabe der Zeitdauer in \n1) Tagen \n2) Monaten \n3) Jahren \n ";
    cin >>choose;
    
        if(choose==1)
             {
             cout<<"Wieviele Tage? ";        
             cin >>dauer;        
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/36000 +kapital;
             schleife = 2; 
      	 }
        else if(choose==2)
             {
             cout<<"Wieviele Monate? "; 
             cin >>dauer;
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/1200 +kapital;
             schleife = 2;
             }
        else if(choose==3)
             {
             cout<<"Wieviele Jahre? "; 
             cin >>dauer;
             cout<<"\n\n\n Nach Berechnung der Zinsen betraegt ihr Kapital "<<(kapital*zinssatz*dauer)/100 +kapital; 
             schleife = 2;
             }
        else
        {
    	 schleife = 1;
        }
    
       if(nochmal != 1)
       	{	
    	   cout<<"\n\nWenn Sie nochmals Berechnen wollen, druecken sie die \" 1 \"\nansonsten eine beliebige Zahl! ";
    	   cin >>nochmal;
    	   cout<<" \n\n\n\n\n";
    	}
    }   
    
    return 0;
    
    }
    

    und hier dazu der verdammte fehler!
    http://img415.imageshack.us/img415/5200/unbenannt4ip.jpg



  • Du musst in deinem "nochmal"-Teil schleife = 0 machen, wenn du nicht 1 drückst, dann geht er nicht wieder in die Schleife



  • danke! hat sich erledigt
    <<closed>>


Anmelden zum Antworten