calculator mit visual c++



  • also ich hab jetzt mal folgendes zu Stande gebracht:

    #include <iostream.h>
    
    int main()
    {
     double operand1;
     double operand2;
     char op;
     double ergebnis;
    
     cout<<"\nMit druecken der Taste c loeschen sie das Ergebnis und starten erneut bei 0.";
     cout<<"\nMit druecken der Taste e beenden Sie das Programm.";
     cout<<"\n\nBitte Eingabe nach folgendem Muster: ";
     cout<<"\nOperand1 <return> ";
     cout<<"\nOperator <return> ";
     cout<<"\nOperand2 <return> ";
     cout<<"\n\n0";
    
     do
     {
      cout<<"\n\n";
      cin>>operand1;
      cin>>op;
      cin>>operand2;
    
      switch(op)
      {
       case '+': ergebnis = operand1 + operand2;
                 cout<<"\n\n"<<ergebnis;
                 break;
    
       case '-': ergebnis = operand1 - operand2;
                 cout<<"\n\n"<<ergebnis;
                 break;
    
       case '*': ergebnis = operand1 * operand2;
                 cout<<"\n\n"<<ergebnis;
                 break;
    
       case '/': if(operand2 == 0)
                 {
                  cout<<"\nDivision durch 0 nicht moeglich!!!";
                 }
                 else
                 {
                  ergebnis = operand1 / operand2;
                  cout<<"\n\n"<<ergebnis;
                 }
                 break;
    
       case 'c': ergebnis = 0;
                 cout<<"\n\n"<<ergebnis;
                 break;          
    
       default:  cout<<"\nUngueltiger Operator wurde eingeben!!!";
                 cout<<"\n\n"<<ergebnis;
      }
     }
     while(op != 'e');
     return 0;
    }
    

    jedoch muss man da nach der eingabe eines Operanden return drücken, von der Aufgabenstellung ist es aber so gemeint das man alles (2 Operanden und den Operator) in eine Eingabezeile schreiben soll.

    Aber das bring ich auch noch raus, hat da jemand eine Idee? ich würde es mit einem char-array versuchen, wenn man nur einstellige Zahlen eingibt würde das wunderbar funktionieren, aber bei mehreren müsste dann zuerst noch eine Überprüfunf stattfinden, wann der Operator kommt.

    aber ansonsten müsste alles soweit passen oder?

    gruß Zeke



  • probier's mal aus, du wirst dich wundern, es geht.

    kürzer

    cin >> operand1 >> op >> operand2;
    

    vielleicht noch irgendeine primitive sicherung gegen falsche eingaben wie zb

    while (op != 'e' && cin)
    

    und so allgemein solltest du statt iostream.h iostream verwenden und deine variablen erst dann einführen, wenn du sie brauchst (statt ganz am anfang).



  • iostream.h und void main() sind bei uns vorgaben die wir irgendwie immer benutzen sollen, auch wenn es wohl überholt ist ..

    danke auf jeden fall noch mal für eure hilfe. ich probier es gleich mal aus.

    sandro



  • ich hab dein programm mal getestet. bei mir rechnet er immer nur eine rechnung und nicht mit dem ergebnis automatisch weiter. jedes mal muß noch wieder der erste operand eingegeben werden. aber ich glaub das packen wir auch noch 🙂

    das ist der code mal mit den änderungen von davie ..

    #include <iostream.h> 
    
    int main() 
    { 
    
     double operand1; 
     double operand2; 
     char op; 
     double ergebnis; 
    
     cout<<"\nMit druecken der Taste c loeschen sie das Ergebnis und starten erneut bei 0."; 
     cout<<"\nMit druecken der Taste e beenden Sie das Programm."; 
     cout<<"\n\nBitte Eingabe nach folgendem Muster: "; 
     cout<<"\nOperand1 <return> "; 
     cout<<"\nOperator <return> "; 
     cout<<"\nOperand2 <return> "; 
     cout<<"\n\n0"; 
    
     do 
     { 
      cin >> operand1 >> op >> operand2;
    
      switch(op) 
      { 
       case '+': ergebnis = operand1 + operand2; 
                 cout<<"\n\n"<<ergebnis; 
                 break; 
    
       case '-': ergebnis = operand1 - operand2; 
                 cout<<"\n\n"<<ergebnis; 
                 break; 
    
       case '*': ergebnis = operand1 * operand2; 
                 cout<<"\n\n"<<ergebnis; 
                 break; 
    
       case '/': if(operand2 == 0) 
                 { 
                  cout<<"\nDivision durch 0 nicht moeglich!!!"; 
                 } 
                 else 
                 { 
                  ergebnis = operand1 / operand2; 
                  cout<<"\n\n"<<ergebnis; 
                 } 
                 break; 
    
       case 'c': ergebnis = 0; 
                 cout<<"\n\n"<<ergebnis; 
                 break;           
    
       default:  cout<<"\nUngueltiger Operator wurde eingeben!!!"; 
                 cout<<"\n\n"<<ergebnis; 
      } 
     } 
     while(op != 'e'); 
     return 0; 
    
     while (op != 'e' && cin);
     return 0;
    }
    


  • dann versuch mal beim ergebnis zuweisen den alten wert zu übernehmen, in etwa so:

    ergebnis += operand2;
    

    @davie
    mir hat man an meiner schule wiederholt beigebracht, dass die variablen die man braucht ganz am anfang zu deklarieren sind, was eigentlich auch logisch und übersichtlicher ist. denn wenn ich mal von einer variable den typ wissen will, muss ich den ganze code danach absuche und überlegen wo ich die zum ersten mal gebraucht habe.
    wenn ich sie aber ganz am anfang deklarier, dann hab ich alles auf einen blick.

    gruß zeke



  • hm da schließ ich mich eher davie an, alles an den Anfang schreiben stammt noch aus C-Zeiten, so wie anscheinend deine Lehrer in der Schule 😉 (nicht ganz so ernst nehmen das mit den Lehrern^^)



  • und gibts es jetzt auch einen grund warum man die variablen deklarationen nicht alle
    am anfang des programms schreiben sollte 😕
    weil die übersichtlichkeit fördert es ja nicht...



  • Bei einfachen Typen (POD) spielts keine Rolle. Bei Objekten jedoch kann es sein
    das die Erstellung bzw Initialisierung wircklich "teuer" ist. Daher erstellt
    man Objekte erst dann wenn sie wirklich benötigt werden.



  • Ich finde schon, dass es überichtlicher wird. Ich leg Variablen da an, wo sie semantisch hingehören. Das ist übersichtlicher, als alles an den Anfang zu klatschen.
    Und wenn du Objkete anlegen willst, wirds noch sinnvoller, die dann anzulegen, wenn man sie braucht. Um so evtl unnötige Konstruktionen zu verhindern und um den Konstruktor für evtl. Initialisierungen nutzen zu können.



  • Die Verwendung von <iostream.h> statt <iostream> ist nur veraltet.
    Die Verwendung von void main() ist gemäss Standard falsch weil es
    void main() dort nicht gibt, auch wenn viele Compiler damit klarkommen


Anmelden zum Antworten