Probleme Taschenrechner



  • @Schlangenmensch Danke. Das werde ich berücksichtigen!!!



  • Bin doch früher dazu gekommen...
    Also ich habe das jetzt so "gelöst". Das mit den Buchstaben werde ich mich wohl noch abfinden müssen...hehe

    Und bezüglich wie oft die Schleife wiederholt wird, verstehe ich nicht bis zum Ende wie ich das realisieren soll. Ich hatte das mit 'for' versucht - ist aber nichts bei rumgekommen!? Ist der Ansatz dazu richtig?
    Daaanke....

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        float z1;
        float z2;
        int op;
        char wahl;
    
        cout << "Das ist ein Taschenrechner." << endl;
    
        do{
        cout << "Wählen Sie eine Option: " << endl;
        cout << "Addition [1]." << endl;
        cout << "Subtraktion [2]." << endl;
        cout << "Multiplikation [3]." << endl;
        cout << "Division [4]." << endl;
        cout << "Beenden? [0]" << endl;
        cin >> op;
            if(op == 0){
                cout << "Beendet, bis zum nächsten Mal." << endl;
            } else {
                if(op == 1){
                    cout << "Bitte geben Sie die erste Zahl ein: " << endl;
                    cin >> z1;
                    cout << "Bitte geben Sie die zweite Zahl ein: " << endl;
                    cin >> z2;
                    cout << "Das Ergebnis ist: " << z1 + z2 << endl << endl;
                } else {
                    if(op == 2){
                        cout << "Bitte geben Sie die erste Zahl ein: " << endl;
                        cin >> z1;
                        cout << "Bitte geben Sie die zweite Zahl ein: " << endl;
                        cin >> z2;
                        cout << "Das Ergebnis ist: " << z1 - z2 << endl << endl;
                    } else {
                        if(op == 3){
                            cout << "Bitte geben Sie die erste Zahl ein: " << endl;
                            cin >> z1;
                            cout << "Bitte geben Sie die zweite Zahl ein: " << endl;
                            cin >> z2;
                            cout << "Das Ergebnis ist: " << z1 * z2 << endl << endl;
                        } else {
                            if(op == 4){
                                cout << "Bitte geben Sie die erste Zahl ein: " << endl;
                                cin >> z1;
                                cout << "Bitte geben Sie die zweite Zahl ein: " << endl;
                                cin >> z2;
                                cout << "Das Ergebnis ist: " << z1 / z2 << endl << endl;
                            }
                        }
                    }
                }
            }
        } while(op != 0);
    }
    

  • Mod

    Macht es denn, was du willst?

    Was ich eigentlich nicht erreichen wollte war, dass du solch eine if-Kaskade schreibst. Dein Programm darf mehr als nur eine einzelne Logikanweisung zur Flusskontrolle enthalten! Meine Vorstellung ging eher in Richtung

    do
    {
      cin >> op;
      if (op == 0) break;
      switch(op)
         // ...
    } while(1)
    


  • @SeppJ Ja daran habe ich schon gedacht... 🙂
    Angenehmes Wochenende....



  • Viel einfacher ist wahrscheinlich folgendes:

    void rechner() {
        std::cout << "Bitte geben Sie eine Aufgabe ein oder Beenden mit einem Buchstaben oder Dateiende-Zeichen!\n";
        double z1, z2, ergebnis;
        char op;
        while (std::cin >> z1 >> op >> z2) {
            switch (op) {
                case '+': ergebnis = z1 + z2; break;
                case '-': ergebnis = z1 - z2; break;
                default:
                    std::cout << "Unbekannter Operator: " << op << '\n';
                    continue;
            }
            std::cout << "Ergebnis: " << ergebnis << "\n";
        }
    }
    

    Hier ist der Trick, dass du gleich Zahl + Operator + Zahl einliest und das Einlesen dieser 3 Dinge auf Richtigkeit prüfst.



  • @wob Habe das jetzt so "gelöst"...
    Ich versuche das halt alles "ausführlicher" zu machen damit ich mich direkt länger damit beschäftige...hehe

    Alles Gute...

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        float z1;
        float z2;
        int op;
        char wahl;
    
        do{
            cout << "Das ist ein Taschenrechner." << endl;
            cout << "Wählen Sie aus: " << endl;
            cout << "Addition [1]." << endl;
            cout << "Subtraktion [2]." << endl;
            cout << "Multiplikation [3]." << endl;
            cout << "Division [4]." << endl;
            cout << "Beenden [0]." << endl;             //Wenn ich mit 0 beenden will muss ich trotzdem noch z1 und z2 eingeben
            cin >> op;
    
            if(op == 0){
                cout << "Beendet.\n";
            } else {
    
                cout << "Bitte Zahl-1 eingeben: " << endl;
                cin >> z1;
                cout << "Bitte Zahl-2 eingeben: " << endl;
                cin >> z2;
    
                switch(op){
                case 1 :
                    cout << "Das Ergebnis ist: " << z1 + z2 << endl << endl;
                    break;
                case 2 :
                    cout << "Das Ergebnis ist: " << z1 - z2 << endl << endl;
                    break;
                case 3 :
                    cout << "Das Ergebnis ist: " << z1 * z2 << endl << endl;
                    break;
                case 4 :
                    cout << "Das Ergebnis ist: " << z1 / z2 << endl << endl;
                    break;
                case 0 :
                    cout << "Beendet." << endl;
                    break;
                //default :                                   //Funktioniert nicht - beendet das Programm
                //    cout << "Falsche Eingabe!";
    
                } cout << "Möchten Sie weiter rechnen? j/n" << endl;
                  cin >> wahl;
                  cout << endl;
            }
    
        } while(wahl == 'j');
                cout << "Bis zum nächsten Mal." << endl;
                system("pause");
    }
    


  • Nicht ganz im Sinne von Dijkstra, aber was soll's:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        float z1;
        float z2;
        int op;
        char wahl;
    
        while (1)
        {
            cout << "Das ist ein Taschenrechner." << endl;
            cout << "Wählen Sie aus: " << endl;
            cout << "Addition [1]." << endl;
            cout << "Subtraktion [2]." << endl;
            cout << "Multiplikation [3]." << endl;
            cout << "Division [4]." << endl;
            cout << "Beenden [0]." << endl;
            cin >> op;
            if (op != 0)
            {
                cout << "Bitte Zahl-1 eingeben: " << endl;
                cin >> z1;
                cout << "Bitte Zahl-2 eingeben: " << endl;
                cin >> z2;
            }
            switch (op)
            {
            case 1:
                cout << "Das Ergebnis ist: " << z1 + z2 << endl
                     << endl;
                break;
            case 2:
                cout << "Das Ergebnis ist: " << z1 - z2 << endl
                     << endl;
                break;
            case 3:
                cout << "Das Ergebnis ist: " << z1 * z2 << endl
                     << endl;
                break;
            case 4:
                cout << "Das Ergebnis ist: " << z1 / z2 << endl
                     << endl;
                break;
            case 0:
                cout << "Beendet." << endl;
                goto endloop;
            default:
                cout << "Falsche Eingabe!" << endl;
            }
            cout << "Möchten Sie weiter rechnen? j/n" << endl;
            cin >> wahl;
            if (wahl != 'j')
            {
                break; // auch: "goto endloop;" möglich...
            }
        }
    endloop:
        cout << "Bis zum nächsten Mal." << endl;
        cout << "press any key to close..." << endl;
        cin >> wahl;
        return EXIT_SUCCESS;
    }
    


  • @EinNutzer0 Danke für diesen Tipp: 'goto' kannte ich noch nicht....



  • @c52jrear sagte in Probleme Taschenrechner:

    @EinNutzer0 Danke für diesen Tipp: 'goto' kannte ich noch nicht....

    Das war kein ernst gemeinter Tipp! Vergiss goto schnellstmöglich wieder!

    (Deswegen auch "Nicht ganz im Sinne von Dijkstra" - siehe https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf)



  • @wob 😃 ... und wieder was dazu gelernt...!


Log in to reply