Taschenrechner bewerten lassen



  • hallo zusammen,

    mach jetzt ne Ausbildung zu Fachinformatiker - Anwendungsentwicklung.
    Da mein Ausbilder die Woche krank ist hab ich den Auftrag bekommem
    nen C++ Buch zu lesen. ich will das mal von euch bewerten lassen.
    Eines muss ich noch sagen hatte zuvor noch keine Programmier erfahrungen.
    Nach 5 Tagen einarbeitung in C++ ist das mein werk(was sagt ihr dazu):

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    inline void addition(long double z1, long double z2);
    inline void subtraktion(long double z1, long double z2);
    inline void multiplikation(long double z1, long double z2);
    inline void division(long double z1, long double z2);
    inline void Oktal(void);
    inline void hex(void);
    inline void hallo(double);
    
    int eingabe;
    double zahl1, zahl2, jein;
    
    #define copyright cout << "\n\n\n ********* (c)Rafael xxxxxxx, Vielen Dank *********\n";
    
    int main(void)
    {
        cout << "\n\t#########################################\n";
        cout << "\t#        Taschenrechner v.0.1.0         #\n";
        cout << "\t#########################################\n\n\n";
        START:
        cout << "---------------------------------------------------------------";
        cout << "\n Bitte geben Sie die Rechenart an, mit der Sie rechnen moechten:\n\n";
        cout << " [1] Addition\n";
        cout << " [2] Subtraktion\n";
        cout << " [3] Multiplikation\n";
        cout << " [4] Division\n";
        cout << "-------------------\n";
        cout << " [5] Dezimal in Oktal\n";
        cout << " [6] Dezimal in Hexadezimal\n";
        cout << "-------------------\n";
        cout << " [7] Sinus\n";
        cout << " [8] Cosinus\n";
        cout << " [9] Tangens\n";
        cout << " [10] Wurzel\n\n\n\n";
        cout << " Eingabe: ";
        cin  >> eingabe;
    
        if(eingabe == 1)
        {
        cout <<"\n\n Sie haben sich fuer die Addition entschieden,\n";
        cout << " bitte geben Sie die 2 Zahlen ein die Sie addieren moechten\n\n";
        cout << " Eingabe Zahl 1: ";
        cin  >> zahl1;
        cout <<" Eingabe Zahl 2: ";
        cin  >> zahl2;
        cout <<"\n Ergebnis:  ";addition(zahl1, zahl2);
        cout <<"\n Moechten Sie noch einen Rechenschritt durchfuehren?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
    
        if(eingabe == 2)
        {
        cout <<"\n\n Sie haben sich fuer die Subtraktion entschieden,\n";
        cout << " bitte geben Sie die 2 Zahlen ein die Sie subtriren moechten\n\n";
        cout << " Eingabe Zahl 1: ";
        cin  >> zahl1;
        cout <<" Eingabe Zahl 2: ";
        cin  >> zahl2;
        cout <<"\n Ergebnis:  ";addition(zahl1, zahl2);
        cout <<"\n Moechten Sie noch einen Rechenschritt durchfuehren?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
    
        if(eingabe == 3)
        {
        cout <<"\n\n Sie haben sich fuer die Multiplikation entschieden,\n";
        cout << " bitte geben Sie die 2 Zahlen ein die Sie multiplizieren moechten\n\n";
        cout << " Eingabe Zahl 1: ";
        cin  >> zahl1;
        cout <<" Eingabe Zahl 2: ";
        cin  >> zahl2;
        cout <<"\n Ergebnis:  ";multiplikation(zahl1, zahl2);
        cout <<"\n Moechten Sie noch einen Rechenschritt durchfuehren?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
    
        if(eingabe == 4)
        {
        cout <<"\n\n Sie haben sich fuer die division entschieden,\n";
        cout << " bitte geben Sie die 2 Zahlen ein die Sie teilen moechten\n\n";
        cout << " Eingabe Zahl 1: ";
        cin  >> zahl1;
        cout <<" Eingabe Zahl 2: ";
        cin  >> zahl2;
        cout <<"\n Ergebnis:  ";division(zahl1, zahl2);
        cout <<"\n Moechten Sie noch einen Rechenschritt durchfuehren?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
        if(eingabe == 5)
        {
        Oktal();
        }
        if(eingabe == 6)
        {
        hex();
        }
        if(eingabe == 7)
        {
        cout << " \n\n [Sinus] Bitte geben Sie ihre Zahl ein: ";
        cin  >> zahl1;
        cout <<"\n\n Sinus: "  << sin (zahl1) << "\n\n" ;
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
            if(eingabe ==8)
        {
        cout << " \n\n [Cosinus] Bitte geben Sie ihre Zahl ein: ";
        cin  >> zahl1;
        cout <<"\n\n Cosinus: "  << cos (zahl1) << "\n\n" ;
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
                if(eingabe ==9)
        {
        cout << " \n\n [Tangens] Bitte geben Sie ihre Zahl ein: ";
        cin  >> zahl1;
        cout <<"\n\n Tangens: "  << tan (zahl1) << "\n\n" ;
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
                if(eingabe ==10)
        {
        cout << " \n\n [Wurzel] Bitte geben Sie ihre Zahl ein: ";
        cin  >> zahl1;
        cout <<"\n\n Wurzel: "  << sqrt (zahl1) << "\n\n" ;
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
        }
        }
        return 0;
    }
    
    //##############################################################################
    //##############################################################################
    
    //---- Funktion für addition ---------------------------------------------------
    
    inline void addition(long double z1, long double z2)
    {
    cout << z1+z2;
    }
    
    //---- Funktion für subtraktion ------------------------------------------------
    
    inline void subtraktion(long double z1, long double z2)
    {
    cout << z1-z2;
    }
    
    //---- Funktion für multiplikation ---------------------------------------------
    
    inline void multiplikation(long double z1, long double z2)
    {
    cout << z1*z2;
    }
    
    //---- Funktion für division ---------------------------------------------------
    
    //---- Funktion für division ---------------------------------------------------
    inline void division(long double z1, long double z2)
    {
    cout << z1/z2;
    }
    
    //---- Funktion für Oktal ---------------------------------------------------
    
    inline void Oktal(void)
    {
        START:
        cout <<"\n\n Sie haben sich fuer die Umwandlung von Dezimal Zahlen,\n";
        cout << " in Oktal Zahlen entschieden, bitte geben Sie die Dezimal ein:\n\n";
        cout << " Dezimal Zahl: ";
        cin  >> zahl1;
    
        cout <<"\n\n Oktal Zahl: "<< showbase << oct << zahl1 << "\n\n" ;
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        }
        else
        {
        copyright;
        cin >> jein;
    
        }
    
    }
    //------------------------------------------------------------------------------
    
    //---- Funktion für hexazezimal ---------------------------------------------------
    
    inline void hex(void)
    {
        START:
        cout <<"\n\n Sie haben sich fuer die Umwandlung von Dezimal Zahlen,\n";
        cout << " in Hexadezimal Zahlen entschieden, bitte geben Sie die Dezimal ein:\n\n";
        cout << " Dezimal Zahl: ";
        cin  >> zahl1;
    
        cout <<"\n\n Oktal Zahl: "<< showbase << hex << zahl1 << "\n\n" ;
        cout <<"\n Moechten Sie noch eine Zahl umwandeln ?";
        cout <<" JA [1] / NEIN [2] :";
        cin  >> jein;
    
        if(jein == 1)
        {
        goto START;
        }
        else
        {
        copyright;
        cin >> jein;
    
        }
    
    }
    //------------------------------------------------------------------------------
    


  • binauch noch Anfänger und ich bin nur mal drübergeflogen, aaber:
    Vorschläge:
    1st: bloß kein 'goto' verwenden!! das gibt das übelste Chaos!!!!! wirst du noch sehen!
    2nd: warum benutzt du kein switch, anstatt der if-Abfragen
    3rd: Einrückung??
    4th: warum so viele cout?? Du kannst das statement über mehrere Zeilen ziehen, like:

    cout << " [1] Addition"       << endl
         << " [2] Subtraktion"    << endl 
         << " [3] Multiplikation" << endl;
    


  • Die Main() ist zu voll... lager mehr Code aus, beherzige die Tipps meines Vorgängers und mache statt so etwas

    //---- Funktion für addition ---------------------------------------------------
    
    inline void addition(long double z1, long double z2)
    {
    cout << z1+z2;
    }
    

    lieber so etwas:

    //---- Funktion für addition ---------------------------------------------------
    
    float addition(float z1, float z2)
    {
       return (z1+z2);
    }
    


  • zu 1: weiss ich aber wenn ich das aj nur 1 mal brauch sprich um zum start zukommen sollte das kein Problem sein

    zu2: weil ich meinem Buch if als erstes dran kamm und dann ab ich switch gelesen und es war zu spät und nun keien lust.

    zu3: einrücken ? was? die if ? wenn ja ! dann ahst recht !

    zu 4: hmm ja hast wirklich recht ich doesel 😃



  • ach ja, hier lässt es sich sicher vermeiden, aber falls du irgendwann doch mal in eine Situation kommst wo du viele

    if(eingabe == 1)
    if(eingabe == 2)
    if(eingabe == 3)
    if(eingabe == 4)

    abfragen hast, dann würde ich es leserlicher machen, z.b. so:

    #define NeueRechnung 1 (nur ein BEISPIEL),

    so dass du später dann so etwas leserliches hast:

    if(eingabe == NeueRechnung)



  • |23| schrieb:

    zu 1: weiss ich aber wenn ich das aj nur 1 mal brauch sprich um zum start zukommen sollte das kein Problem sein

    Das kann man aber auch anders loesen. Z. B. koennt man ne schoene while-Schleife
    um den verarbeitenden Code machen. Sowas wie

    while(antwort != 'n') {
     //tue was
    }
    

    waere vom Code her viel schoener.

    zu2: weil ich meinem Buch if als erstes dran kamm und dann ab ich switch gelesen und es war zu spät und nun keien lust.

    Wenn du es machst, wirst du sehen das der Code gleich viel uebersichtlicher
    wird. Ja ich weiss, is jetzt mehr schreibarbeit und wir sind ja alle Faul 😃

    zu3: einrücken ? was? die if ? wenn ja ! dann ahst recht !

    Generell ein bisschen einruecken, verbessert die Lesbarkeit des Codes.

    mfg
    v R



  • @uhuhuh: Er benutzt aber double, nicht float 😉

    Außerdem musst du kein goto verwenden, du kannst die Programmstruktur auch ändern. Es ist halt nur sehr unübersichtlich. Benutze stattdessen lieber Schleifen, die so konstruiert sind, dass sie automatisch wieder zurückführen (da wo Start ist).

    Ansonsten kann ich nur sagen respekt, da gibts etliche, die bringen nach mehreren wochen nicht mal ansatzweise sowas zustande. Du scheinst deine Hausaufgaben gemacht zu haben.
    Nur halt noch in switch umändern, das wäre wirklich besser, und kostet ja nicht mal ne Minute.



  • ok ok dann eben double 🙄 😉



  • uhuhuh schrieb:

    ach ja, hier lässt es sich sicher vermeiden, aber falls du irgendwann doch mal in eine Situation kommst wo du viele

    if(eingabe == 1)
    if(eingabe == 2)
    if(eingabe == 3)
    if(eingabe == 4)

    abfragen hast, dann würde ich es leserlicher machen, z.b. so:

    #define NeueRechnung 1 (nur ein BEISPIEL),

    so dass du später dann so etwas leserliches hast:

    if(eingabe == NeueRechnung)

    Ich glaube ein

    const int NeueRechnung = 1;
    //oder
    enum Modes {
       NeueRechnung = 1,
       X,
       Y,
       //usw.
    };
    

    waere hier besser.

    mfg
    v R



  • Ich danke schon mal für euro Bewertungen,tips usw.

    noch 50min dann hab ich mein Wochenende. Ich könnte das jetzt ja alles machen 😃 ja RICHTIG.... aber nee hab wirklich end mehr die lust zu. 😞

    Ich werde am Sonntag den kompletten Taschenrechner umcoden und ihm dann noch mal hier einposten!

    achja und was ist an double so schlimm das kann?

    mfg

    |23|

    ps. Das forum ist klasse, ihr seid klasse 😃



  • |23| schrieb:

    achja und was ist an double so schlimm das kann?

    double ist schlimm nicht nutze präzise 😃



  • die globalen Variablen kanns du durch etwas anderes Design auch vermeiden.
    ich konnte nach ein paar Tagen noch nicht so viel wie du!
    hier mal ein Vorschlag für die Logik:
    !!caution: wie gesagt bin ich auch noch ein Anfänger und alles ungetestet
    Ausschnitt:

    int main(void){
      bool go_on;  
      int eingabe;
      do{
        do{
          cout << "\n\t#########################################" << endl
          /*........*/
        }while( eingabe<1 || eingabe>10 );
        switch( eingabe ){
          case 1: /*...Aufruf blabla*/
                  break;
          case 2: /*...Aufruf blabla*/
                  break;
          //...//
          default: /*...*/
        }
        cout<<"noch mal? (0=nein)"<<endl;
        cin>>go_on;
      }while( go_on );
      return 0;
    }
    

    formale Fehlerprüfung nicht vergessen 😉



  • |23| schrieb:

    Ich danke schon mal für euro Bewertungen,tips usw.

    noch 50min dann hab ich mein Wochenende. Ich könnte das jetzt ja alles machen 😃 ja RICHTIG.... aber nee hab wirklich end mehr die lust zu. 😞

    Ich werde am Sonntag den kompletten Taschenrechner umcoden und ihm dann noch mal hier einposten!

    achja und was ist an double so schlimm das kann?

    Er hatte die Funktion addiere mit den Parametern vom Typ float gepostet und
    du hattest diese mit double deklariert gehabt. Es ist im Prinzip nichts
    schlimmes dran und der Sinn von uhuhuh's Post geht dadurch auch nicht
    verloren.

    Es ist nur so, dass wenn du eine Variable vom Typ double an eine Variable
    vom Typ float zuweist, dann gehen Nachkommastellen verloren. Daher der Einwand.

    mfg

    |23|

    ps. Das forum ist klasse, ihr seid klasse 😃

    Ein grosses DANKE! 🙂

    mfg
    v R



  • habe ich ihm jetzt zu viel von mir aufgedrückt? habe wohletwas zu viel veraten. sorry n' thanx' too



  • ich finde dein codebeispiel ein bisschen zu kompliziert und undruchsichtig. 😉
    Vor allem halt für einen Anfänger.



  • und falsch*hust*

    while( eingabe<1 && eingabe>10 );
    

    ahja, 0 ist kleiner als 1 und größer als 10 🙄



  • habe schon verbessert -> habt ja recht 😞 😞



  • ähm, vielleicht könnte man ja mal ne richtige eingabe, sprich 5 + 4 in einem rutsch simulieren. das is schon etwas schwieriger.



  • Hi!

    Simulieren muss man da garnichts .... 😑
    Schreib dir einen Parser ..... dann kannst du sowas wie 5 + 10 * 3 machen.
    🕶

    Aber einen Parser zu programmieren ist nicht gerade leicht .... bin davon noch weit entfernt 😉

    cu


Anmelden zum Antworten