switch Anweisung?



  • Wie soll das denn ohne Schleifen funktionieren ?

    Vllt. wenn du deine Anweisungen per Hand 30 mal hinklatschst ...
    Von wem/wo kommt die Aufgabenstellung?



  • bandchef schrieb:

    Ich soll laut Aufgabenstellung aber keine Schleifen benutzen. Kann mir aber auch nicht vorstellen wie das dann gehen soll

    Dann mal bitte den genauen Wortlaut der Aufgabe.


  • Mod

    Theoretisch ginge das ohne Schleifen mittels Rekursion, aber ich bin mir sehr sicher, dass du deine Aufgabenstellung nicht verstanden hast.



  • bandchef schrieb:

    Ich soll laut Aufgabenstellung aber keine Schleifen benutzen. Kann mir aber auch nicht vorstellen wie das dann gehen soll

    Dann baust du dir halt Schleifen mit einem goto nach.

    Oder du verwendest, falls das bei dir eine Übung zu Funktionszeigern und Templates ist, die Alternative.



  • Dann würde ich die Aufgabe lieber unerledigt lassen als sie mit goto zu lösen.



  • Ich glaub ich geb euch mal die ganze Aufgabenstellung:

    Implementieren Sie einen einfachen Taschenrechner. Der Taschenrechner erwartet Eingaben
    von ganzen Zahlen und Operatoren (+, -, *, /, 😵 und berechnet jeweils das Ergebnis der
    eingegebenen Rechnung, ohne jedoch Punkt-vor-Strich-Rechnung zu berücksichtigen. Die
    Operatoren haben die aus C bekannte Semantik. Folgendes Eingabeschema soll der Benutzer
    ausführen können:
    1. Die erste Eingabe muss eine Zahl sein.
    2. Die zweite Eingabe muss ein Operator (siehe oben) oder das Zeichen ‘q‘ für „quit“ sein.
    3. Die dritte Eingabe muss eine Zahl sein.
    4. Nach der dritten Eingabe wird das Ergebnis der bisherigen Eingabe angezeigt und weitere Eingaben dürfen folgen.
    5. Die nächste Eingabe muss ein Operator oder ‘q‘ sein.
    6. Die nächste Eingabe muss eine Zahl sein.
    7. Nach der Eingabe in Schritt 6. wird das Ergebnis der bisherigen Eingabe angezeigt
    und weitere Eingaben dürfen folgen. Hierzu wiederhole ab Schritt 5.
    Die Eingabe von ‘q‘ anstelle eines Operators beendet das Programm. Vorher geben Sie jedoch bitte noch das Endergebnis der Rechnung aus.

    Verwenden Sie zur Auswertung des Operators bitte eine switch-Anweisung.

    EDIT: Goto-Sprünge ist schlechter Stil welchen unser Prof ein paar mal erwähnt und somit mit Sicherheit goto auf Flach fällt



  • Und wo steht da jetzt, dass du keine Schleife verwenden darfst?



  • Hmm wo steht denn, dass du keine Schleifen verwenden darfst?



  • "Verwenden Sie zur Auswertung des Operators bitte eine switch-Anweisung."

    Ich hab das so verstanden, dass sich der Satz auf die ganze Aufgabe bezieht...



  • Ne, wieso denn.

    Das Auswerten der Operatoren mit switch Anweisung ist ja logisch.
    Das hat aber mit dem Rest des Programmes wenig zu tun.



  • Hm, ok, das nimmt natürlich dann der Aufgabe seinen Schrecken... 🙂



  • Joa ^^ Ich würd eher sagen, dass das der Aufgabe seine Sinnlosigkeit nimmt, aber oke :p

    Viel Spaß beim Lösen



  • Es wäre auf jeden Fall sinnvoll das switch zeug in eine funktion (zB calc()) zu unterteilen. Ich hab mir es irgendwie angewöhnt alles außerhalb von main() und sogar außerhalb von main.cpp zu schreiben. So habe ich in main() zB nur: MeinKern *kern = new MeinKern(); kern->start(); . Ich wies, das ist komisch... 🙄

    (vv signatur gucken vv)



  • lk schrieb:

    Es wäre auf jeden Fall sinnvoll das switch zeug in eine funktion (zB calc()) zu unterteilen. Ich hab mir es irgendwie angewöhnt alles außerhalb von main() und sogar außerhalb von main.cpp zu schreiben. So habe ich in main() zB nur: MeinKern *kern = new MeinKern(); kern->start(); . Ich wies, das ist komisch... 🙄

    Das wird noch.



  • Hi Leute!

    Ihr kennt ja jetzt meine Aufgabe. Ich hab aber trotzdem irgendwie Probleme mit dem Verständnis der Aufgabe. Das liest sich für micht so, dass wenn Schritt 4 (also das Anzeigen des Ergebnisses) vorbei ist dann noch weitere Eingaben (ich find das sehr ungenau angegeben... was sind diese weiteren Eingaben?) machen darf. Das ist mein erstes Problem. Gut man darf weitere Eingaben MUSS aber anscheinend nicht. Dann geht's weiter bei Schritt 5. Der ist klar. Schritt 6 ist mir unklar. Eingabe einer Zahl. Wieder so ungenau. Welche Zahl meint er denn jetzt? Die erste oder die zweite? Vor allem die Eingabe einer Zahl macht doch nicht so viel Sinn, da ich ja dann bei der nächsten Rechenoperation die neue eingegebene Zahl mit der alten Zahl von ganz von Anfang mit dem neuen Operator verrechne... Schritt 7 ist klar, ich soll einfach wieder holen. Meine wahrscheinlich noch fehlerhaftes Programm seht ihr unten:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    char op;
    int zahl1, zahl2, wzahl, erg, quit;
    
    cout << "Zahl 1 eingeben: ";
    cin >> zahl1;
    
    do
    {
    cout << endl << "Operator eingeben (moeglicher Operator: +, -, *, / oder %): ";
    cin >> op;
    
    cout << endl << "Zahl 2 eingeben: ";
    cin >> zahl2;
    
    switch (op)
    {
    case 43:
         cout << "Sie befinden sich in Addition" << endl;
         erg = zahl1 + zahl2;
         cout << "Ergebnis der Addition: " << erg << endl;
         break;
    
    case 45:
         cout << "Sie befinden sich in Subtraktion" << endl;
         erg = zahl1 - zahl2;
         cout << "Ergebnis der Subtraktion: " << erg << endl;
         break;
    
    case 42:
         cout << "Sie befinden sich in Multiplikation" << endl;
         erg = zahl1 * zahl2;
         cout << "Ergebnis der Multiplikation: " << erg << endl;
         break;
    
    case 47:
         cout << "Sie befinden sich in Division" << endl << endl;
         erg = zahl1 / zahl2;
         cout << "Ergebnis der Division: " << erg << endl;
         break;
    
    case 37:
         cout << "Sie befinden sich in Modulo" << endl << endl;
         erg = zahl1 % zahl2;
         cout << "Ergebnis von Modulo: " << erg << endl;
         break;
    
    default:
            cout << "Auf wiedersehen!" << endl;
            break;
    }
    }while(op != 113);
    
    system("pause");
    return 0;   
    }
    

    Wie seht ihr die Aufgabe? Ist die Aufgabe ungenau gestellt, oder bin ich einfach zu blöd/dumm/unerfahren oder für die Informatik nicht geeignet um das kapieren?

    Danke!



  • Ich würde sagen, dass du das Ergebnis was du bekommst weiter verwenden sollst.
    Das ist eigentlich ziemlich unmissverständlich formuliert und macht auch den meisten Sinn, weil man damit einem Taschenrechner sehr nahe kommt...
    Z.B.:
    4+4=8
    Eingabe von -2:
    8-2=6
    Eingabe von 4:
    6
    4=24
    usw.

    Schreib statt

    case 42
    

    lieber

    case '*'
    

    damit sofort klar ist das du ein char vergleichen möchtest und nicht einen int, zudem muss man nicht die ascii-Zeichen raten.



  • Also, die Taschenrechnerfunktion geht jetzt eigenlich schon mal und zwar so wie du geschrieben hast, bzw. wie es die Aufgabe in der Tat verlangt. Das einzige Problem was ich jetzt noch habe ist, dass ich nicht recht weiß, wie ich die Sache mit dem "Quit" hinbekommen soll. Wenn ich mich nun bei Schritt 5 der Aufgabenstellung befinde und anstatt einen Operator die Taste "q" drücke, dann kommt trotzdem immer erst noch der darauffolgende Schritt "Zahl2 eingeben: " und dann erst der default Fall und erst dann wird die do-while-Schleife beendet, da dann die Bedingung nicht mehr erfüllt ist. Ich möchte aber, dass wenn ich bei Schritt 5 die Taste "q" drücke er mir SOFORT in den default-Fall springt und die do-while-Schleife beendet wird. Hier mein CODE:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    char op;
    int zahl1, zahl2, erg, quit;
    
    cout << "Zahl 1 eingeben: ";
    cin >> zahl1;
    
    do
    {
    cout << endl << "Operator eingeben (moeglicher Operator: +, -, *, / oder %): ";
    cin >> op;
    
    cout << endl << "Zahl 2 eingeben: ";
    cin >> zahl2;
    
    switch (op)
    {
    case '+':
         cout << "Sie befinden sich in Addition" << endl;
         erg = zahl1 + zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Addition: " << erg << endl;
         break;
    
    case '-':
         cout << "Sie befinden sich in Subtraktion" << endl;
         erg = zahl1 - zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Subtraktion: " << erg << endl;
         break;
    
    case '*':
         cout << "Sie befinden sich in Multiplikation" << endl;
         erg = zahl1 * zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Multiplikation: " << erg << endl;
         break;
    
    case '/':
         cout << "Sie befinden sich in Division" << endl << endl;
         erg = zahl1 / zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Division: " << erg << endl;
         break;
    
    case '%':
         cout << "Sie befinden sich in Modulo" << endl << endl;
         erg = zahl1 % zahl2;
         zahl1 = erg;
         cout << "Ergebnis von Modulo: " << erg << endl;
         break;
    
    default:
            cout << "Auf wiedersehen!" << endl;
            break;
    }
    }while(op != 'q');
    
    system("pause");
    return 0;   
    }
    


  • So, ich glaub ich hab die Lösung meines Problems nun selber hinbekommen. Vielleicht seid ihr so nett und guckt mal drüber ob das so der Aufgabe entspricht, bzw. ob ihr das euch auch so vorgestellt habt... Danke!

    Hier der neue Code:

    #include<iostream>
    using namespace std;
    
    int main()
    {
    char op;
    int zahl1, zahl2, erg, quit;
    
    cout << "Zahl 1 eingeben: ";
    cin >> zahl1;
    
    do
    {
    cout << endl << "Operator eingeben (moeglicher Operator: +, -, *, /, % oder q fuer Quit): ";
    cin >> op;
    
    switch(op)
    {
    case '+':
         cout << endl << "Sie befinden sich in Addition" << endl;
         cout << endl << "Zahl 2 eingeben: ";
         cin >> zahl2;
         erg = zahl1 + zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Addition: " << erg << endl;
         break;
    
    case '-':
         cout << endl << "Sie befinden sich in Subtraktion" << endl;
         cout << endl << "Zahl 2 eingeben: ";
         cin >> zahl2;
         erg = zahl1 - zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Subtraktion: " << erg << endl;
         break;
    
    case '*':
         cout << endl << "Sie befinden sich in Multiplikation" << endl;
         cout << endl << "Zahl 2 eingeben: ";
         cin >> zahl2;
         erg = zahl1 * zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Multiplikation: " << erg << endl;
         break;
    
    case '/':
         cout << endl << "Sie befinden sich in Division" << endl << endl;
         cout << endl << "Zahl 2 eingeben: ";
         cin >> zahl2;
         erg = zahl1 / zahl2;
         zahl1 = erg;
         cout << "Ergebnis der Division: " << erg << endl;
         break;
    
    case '%':
         cout << endl << "Sie befinden sich in Modulo" << endl << endl;
         cout << endl << "Zahl 2 eingeben: ";
         cin >> zahl2;
         erg = zahl1 % zahl2;
         zahl1 = erg;
         cout << "Ergebnis von Modulo: " << erg << endl;
         break;
    
    default:
            cout << endl << "Auf wiedersehen!" << endl;
            break;
    }
    }while(op != 'q');
    
    system("pause");
    return 0;   
    }
    


  • Nachdem ich 3 mal meine Meinung geändert habe bin ich zu dem Schluss gekommen, dass das Programm genau das macht was gefordert ist 👍.
    Nur wenn du was anderes als q(oder operator) eingibst, dann sagt der Taschenrechner "Auf Wiedersehen" beendet aber nicht.

    Die Variable quit ist überflüssig und Einrückungen könnten noch optimiert werden.


Anmelden zum Antworten