C++ Taschenrechner mit mini Problem



  • Guten Tag,

    Vorneweg hoffe ich, ich habe den richtigen Bereich für meine Frage gewählt.

    Meine Aufgabe ist es einen Taschenrechner mithilfe von C++ zu programmieren, versuche es nun seit 3 Tagen. 😕
    Bin der Meinung es fehlt nicht mehr viel zum Erfolg.
    die Ausgabe soll später so sein:
    Ich gebe die 1. zahl ein, dann die 2. zahl anschließend das gewünschte Rechenzeichen (+,-,*,/).
    dann wird es gerechnet und soll so ausgegeben werden:

    Geben Sie die 1. Zahl ein: 3.3
    Geben Sie die 2. Zahl ein: 8.8
    Geben Sie die Rechenoperation ein: /
    Das Ergebnis der Division lautet: 0.375

    Jedoch soll mittels einer oder mehrerer Funktionen auch die Ergebnisse aller Grundrechenarten angezeigt werden, unabhängig davon welche Option gewählt wurden.

    also so:

    Geben Sie die 1. Zahl ein: 3.3
    Geben Sie die 2. Zahl ein: 8.8
    Geben Sie die Rechenoperation ein: /
    Das Ergebnis der Division lautet: 0.375

    Alle Berechnungen:
    Das Ergebnis der Addition lautet: 12.1
    Das Ergebnis der Subtraktion lautet: -5.5
    Das Ergebnis der Multiplikation lautet: 29.04
    Das Ergebnis der Division lautet: 0.375

    mein Quelltext sieht im moment so aus:

    /*#####################
    e03_5
    ######################*/
    
    #include <iostream>
    
    using namespace std;
    
    double eingabe_zahl_1(){
    
        double zahl1;
        cout << "Bitte geben Sie Zahl 1 ein: ";
        cin >> zahl1;
        return zahl1;
    }
    double eingabe_zahl_2(){
    
        double zahl2;
        cout << "Bitte geben Sie Zahl 2 ein: ";
        cin >> zahl2;
        return zahl2;
    }
    char eingabe_rechenzeichen(){
    
        char rechenzeichen;
        cout << "Geben Sie ein Rechenzeichen ein, (+,-,*,/) : ";
        cin >> rechenzeichen;
        return rechenzeichen;
    }
    
    double add(double zahl1, double zahl2){
        double erg_add;
        erg_add = zahl1 + zahl2;
        return erg_add;
    }
    
    double sub(double zahl1, double zahl2){
        double erg_sub;
        erg_sub = zahl1 - zahl2;
        return erg_sub;
    }
    
    double mult(double zahl1, double zahl2){
        double erg_mult;
        erg_mult = zahl1 * zahl2;
        return erg_mult;
    }
    
    double div(double zahl1, double zahl2){
        double erg_div;
        erg_div = zahl1 / zahl2;
        return erg_div;
    }
    
    // Das ist die gewünschte Funktion "alle"
    void alle(double erg_add, double erg_sub, double erg_mult, double erg_div){
        cout << "Alle Berechnungen:" << endl;
        cout << "Das Ergebnis der Addition lautet:\t " << erg_add << endl;
        cout << "Das Ergebnis der Subtraktion lautet:\t " << erg_sub << endl;
        cout << "Das Ergebnis der Multiplikation lautet:\t " << erg_mult << endl;
        cout << "Das Ergebnis der Division lautet:\t " << erg_div << endl;
    }
    
    int main(){
    
        char eingabe_rechenzeichen;
        char rechenzeichen;
        double zahl1;
        double zahl2;
        double ergebnis;
        double erg_add; 
        double erg_sub;
        double erg_mult;
        double erg_div;
        zahl1 = eingabe_zahl_1();
        zahl2 = eingabe_zahl_2();
        rechenzeichen = eingabe_rechenzeichen;
         switch (eingabe_rechenzeichen){                    
            case '+': ergebnis = zahl1 + zahl2; break;  
            case '-': ergebnis = zahl1 - zahl2; break;  
            case '*': ergebnis = zahl1 * zahl2; break;  
            case '/':
                if (zahl2 == 0)
                    cout << "0 ist verboten !" << endl;
                else ergebnis = zahl1 / zahl2; break;
            default: cout << "unbekanntes Rechenzeichen...\n";
        }
        cout << zahl1 << ' ' << rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n' << endl;
    
        cout << "\n";
        erg_add = add(zahl1, zahl2);
        erg_sub = sub(zahl1, zahl2);
        erg_mult = mult(zahl1, zahl2);
        erg_div = div(zahl1, zahl2);
        alle(erg_add, erg_sub, erg_mult, erg_div);
    
        getchar();
        getchar();
        return 0;
    }
    

    jedoch wird nun nach der 2. Zahl nicht nach dem Rechnzeichen gefragt sondern einfach "unbekanntes Rechenzeichen" und das Ergebnis aller Operationen.
    Hoffe Ihr könnt mir helfen.
    Vielen dank schon mal im vorraus 🙂



  • Du hast da eine unbenutzte Variable namens eingabe_rechenzeichen, dabei hast Du auch eine Funktion mit gleichem Namen. Zuweisen tust Du jedoch die undefinierte Variable, die Funktion rufst Du nicht auf.

    Also Erstens: Die unbenutzte Variable weglassen.
    Und Zweitens: Zeile 78: eingabe_rechenzeichen**()**;



  • Hallo gnihihihihi,

    Danke erst einmal für die blitzschnelle Antwort,
    jetzt funktioniert es schon ganz gut nur eine Sache macht nicht ganz was sie soll.
    Nachdem ich das Rechenzeichen eingeben habe fragt der noch mal nach dem rechenzeichen. Und gibt den Satz doppelt aus, weil ich ja auch die Funktion noch einmal aufrufe.

    diesem code:

    cout << zahl1 << ' ' << eingabe_rechenzeichen() << ' ' << zahl2 << " = " << ergebnis << '\n' << endl;
    

    oder gibt Hexademial raus bei diesem code:

    cout << zahl1 << ' ' << eingabe_rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n' << endl;
    

    was mache ich noch falsch ?
    ich brauch nur das rechenzeichen aus Zeile 27.



  • Du hast doch eine Variable rechenzeichen?! Nutz die doch einfach zur Ausgabe.



  • c++neuling92 schrieb:

    Nachdem ich das Rechenzeichen eingeben habe fragt der noch mal nach dem rechenzeichen.

    *seuftz*

    Wetten, Dein switch-Statement, sieht nun so aus:

    switch(eingabe_rechenzeichen())
    

    Normal, dass hier dann zweimal der Operator abgefragt wird - Du fragst ihn ja schließlich schon eine Zeile davor ab. Du musst die Variable benutzen, der Du den Operatoren zugewiesen hast, und nicht nochmals die Funktion aufrufen.



  • Nathan schrieb:

    Du hast doch eine Variable rechenzeichen?! Nutz die doch einfach zur Ausgabe.

    Die erkennt er aber irgendwie nicht 😕

    gnihihihihi schrieb:

    Wetten, Dein switch-Statement, sieht nun so aus:

    switch(eingabe_rechenzeichen())
    

    Wette gewonnen 👍

    jetzt sieht es so aus

    int main(){
    
        char rechenzeichen;
        double zahl1;
        double zahl2;
        double ergebnis;
        double erg_add;
        double erg_sub;
        double erg_mult;
        double erg_div;
        zahl1 = eingabe_zahl_1();
        zahl2 = eingabe_zahl_2();
    	eingabe_rechenzeichen();
         switch (rechenzeichen){                    
            case '+': ergebnis = zahl1 + zahl2; break;  
            case '-': ergebnis = zahl1 - zahl2; break;  
            case '*': ergebnis = zahl1 * zahl2; break;  
            case '/':
                if (zahl2 == 0)
                    cout << "0 ist verboten !" << endl;
                else ergebnis = zahl1 / zahl2; break;
            default: cout << "unbekanntes Rechenzeichen...\n";
        }
        cout << zahl1 << ' ' << rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n' << endl;
    

    jedoch bekomm ich jetzt nach dem Rechenzeichen direkt "unbekanntes rechenreichen" weil kein "case" angesprochen wird.
    Das Ergebnis ist immer 0 und das rechenzeichen zwischen den Zahlen wir nicht angezeigt.



  • Der Variablen rechenzeichen solltest Du auch den zurückgegebenen Wert der Funktion eingabe_rechenzeichen() zuweisen.



  • Das war ne schwere Geburt, aber das Kind ist wohlauf.
    im Klartext, vielen herzlichen dank, jetzt klappt alles wie es soll 🙂 🙂

    so sieht das ganze nun aus.

    /*#####################
    e03_5
    ######################*/
    
    #include <iostream>
    
    using namespace std;
    
    double eingabe_zahl_1(){
    
    	double zahl1;
    	cout << "Bitte geben Sie Zahl 1 ein: ";
    	cin >> zahl1;
    	return zahl1;
    }
    double eingabe_zahl_2(){
    
    	double zahl2;
    	cout << "Bitte geben Sie Zahl 2 ein: ";
    	cin >> zahl2;
    	return zahl2;
    }
    char eingabe_rechenzeichen(){
    
    	char rechenzeichen;
    	cout << "Geben Sie ein Rechenzeichen ein, (+,-,*,/) : ";
    	cin >> rechenzeichen;
    	return rechenzeichen;
    }
    
    double add(double zahl1, double zahl2){
    	double erg_add;
    	erg_add = zahl1 + zahl2;
    	return erg_add;
    }
    
    double sub(double zahl1, double zahl2){
    	double erg_sub;
    	erg_sub = zahl1 - zahl2;
    	return erg_sub;
    }
    
    double mult(double zahl1, double zahl2){
    	double erg_mult;
    	erg_mult = zahl1 * zahl2;
    	return erg_mult;
    }
    
    double div(double zahl1, double zahl2){
    	double erg_div;
    	erg_div = zahl1 / zahl2;
    	return erg_div;
    }
    
    // Das ist die gewünschte Funktion "alle"
    void alle(double erg_add, double erg_sub, double erg_mult, double erg_div){
    	cout << "Alle Berechnungen:" << endl;
    	cout << "Das Ergebnis der Addition lautet:\t " << erg_add << endl;
    	cout << "Das Ergebnis der Subtraktion lautet:\t " << erg_sub << endl;
    	cout << "Das Ergebnis der Multiplikation lautet:\t " << erg_mult << endl;
    	cout << "Das Ergebnis der Division lautet:\t " << erg_div << endl;
    }
    
    int main(){
    
        char rechenzeichen;
        double zahl1;
        double zahl2;
        double ergebnis;
        double erg_add;
        double erg_sub;
        double erg_mult;
        double erg_div;
        zahl1 = eingabe_zahl_1();
        zahl2 = eingabe_zahl_2();
    	rechenzeichen = eingabe_rechenzeichen();
    		switch (rechenzeichen){                    
            case '+': ergebnis = zahl1 + zahl2; break;  
            case '-': ergebnis = zahl1 - zahl2; break;  
            case '*': ergebnis = zahl1 * zahl2; break;  
            case '/':
                if (zahl2 == 0)
                    cout << "0 ist verboten !" << endl;
                else ergebnis = zahl1 / zahl2; break;
            default: cout << "unbekanntes Rechenzeichen...\n";
    
        }
        cout << zahl1 << ' ' << rechenzeichen << ' ' << zahl2 << " = " << ergebnis << '\n' << endl;
    
    	erg_add = add(zahl1, zahl2);
    	erg_sub = sub(zahl1, zahl2);
    	erg_mult = mult(zahl1, zahl2);
    	erg_div = div(zahl1, zahl2);
    	alle(erg_add, erg_sub, erg_mult, erg_div);
    
    	getchar();
    	getchar();
    	return 0;
    }
    

Anmelden zum Antworten