Taschenrechner modulo



  • Guten Abend,

    ich sitze grad am programmieren meines Taschenrechners jedoch habe ich probleme beim modulo operator und default.

    default:das programm begibt sich in eine endlosschleife sobald ich einen buchstaben eintippe. Ich weiß nicht wie das Problem beheben kann.

    Modulo-Operator: Ich weiß nicht wie ich das realisieren soll :S

    #include <iostream>
    using namespace std;
    
    int main()
    
    {
    	double zahl1, zahl2, summe = 0.0;
    	char operand, eingabe = '/0'; 	 
    	bool run = true;
    
    	while (run == true){
    
    		cout << " Bitte geben Sie zwei Zahlen ein und einen Operanden" << endl;
    		cin >> zahl1 >> operand >> zahl2;
    
    		switch (operand){
    
    		case '+':
    			summe = zahl1 + zahl2;
    			cout << "Ergebnis: " << summe << endl;
    			break;
    
    		case '-':
    			summe = zahl1 - zahl2;
    			cout << "Ergebnis: " << summe << endl;
    			break;
    		case '*':
    			summe = zahl1 * zahl2;
    			cout << "Ergebnis: " << summe << endl;
    			break;
    
    		case '/':
    		{
    			if (zahl1 <= 0 || zahl2 <= 0)
    			{
    				cout << "Bitte nur Zahlen groeser 0 eingeben" << endl;
    			}
    			else{
    				cout << " Moechten Sie eine Ganzzahldivision durchfuhren?" << endl;
    				cin >> eingabe;
    				if (eingabe == 'j'){
    					summe = zahl1 / zahl2;
    					cout << "Ergebnis: " << (int)summe << endl;
    				}
    				else{
    					summe = zahl1 / zahl2;
    					cout << "Ergebnis: " << (double)summe << endl;
    				}
    			}
    
    		}
    		default:
    		cout << "Unbekanntes Rechenzeichen bitte ueberpruefen Sie ihre Eingabe !" << endl;
    		}
    	}
    	system("pause");
    	return 0;
    }
    

    Mit freundlichen Grüßen


  • Mod

    Edit: Ups, Problem falsch verstanden.



  • DAs Programm sieht gut aus. Wenn du das bisher geschafft hast, sollte der Rest (grad Modulo!) kein Problem darstellen.

    Kann es sein, dass du das nicht selbst geschrieben hast?



  • Es gibt Funktionen dafür in cmath.
    Schau mal nach: http://www.cplusplus.com/reference/cmath/



  • Es fehlt ein break für den Divisionscase, das Nullbyte schreibt man mit '\0' (\ nicht /) und die eingabe Variable kannst du auch erst im Divisionscase deklarieren.



  • Du musst cstdlib einbinden um system zu verwenden.

    char operand, eingabe = '/0';
    // Du meinst wohl eher '\0'
    

    Modulo kannst du doch so machen:

    case '%':
                summe = zahl1 % zahl2
                cout << "Ergebnis: " << summe << endl;
                break;
    

    Wobei du hier auch auf 0 überprüfen musst.
    Dass es beim default eine Endlosschleife gibt ist nicht wunderlich, du verlässt die Schleife ja nicht.
    Wofür hast du denn den flag, wenn er immer true bleibt?



  • Bitmapper schrieb:

    Modulo kannst du doch so machen:

    case '%':
                summe = zahl1 % zahl2
                cout << "Ergebnis: " << summe << endl;
                break;
    

    Schon selber probiert, was der Compiler zu % bei Fließkommazahlen sagt?



  • Hallo,

    das programm habe ich selbst geschrieben 🙂
    Den Modulo-operator wollte ich mit dem fmod befehl realisieren. Jedoch haben wir in der Vorlesung so ein Befehl noch nicht verwendet und ich wollte wissen ob es eine konventionellere Lösung dafür gibt.

    Die Ausgabe sobald ich einen Buchstaben eintippe erfolgt wieder endlos.



  • DirkB schrieb:

    Bitmapper schrieb:

    Modulo kannst du doch so machen:

    case '%':
                summe = zahl1 % zahl2
                cout << "Ergebnis: " << summe << endl;
                break;
    

    Schon selber probiert, was der Compiler zu % bei Fließkommazahlen sagt?

    Ja, ich dachte er will den Rest von einer Integerdivision, war auch nur als Beispiel gedacht.
    Dann eben so:

    case '%':
                summe = (int) zahl1 % (int) zahl2;
                cout << "Ergebnis: " << summe << endl;
                break;
    


  • mc52 schrieb:

    Die Ausgabe sobald ich einen Buchstaben eintippe erfolgt wieder endlos.

    Ja, du musst in dem default case run = flase setzen:

    default:
            cout << "Unbekanntes Rechenzeichen bitte ueberpruefen Sie ihre Eingabe !" << endl;
            run = false;
    

    Dann kommst du aus der Schleife raus.



  • Also Problem mit Modulo gelöst danke 🙂

    @Bitmapper:

    Jedoch wird nun das Programm beendet. Wie krieg ich es hin dass das Programm nun nach der Ausgabe eine neue Eingabe fordert ?



  • mc52 schrieb:

    Jedoch wird nun das Programm beendet. Wie krieg ich es hin dass das Programm nun nach der Ausgabe eine neue Eingabe fordert ?

    1. Ansatz:
    Vorher lief das Programm weiter.
    Dann hast du eine Änderung gemacht und es wird beendet.
    -> Änderung zurücknehmen

    2. Ansatz (mit Überlegung)
    Die Schleife läüft, solange run gleich true ist.
    -> run darf nicht false sein.


Anmelden zum Antworten