Rechenzeichen variabel halten?



  • Moinsen,
    habe einen Taschenrechner programmiert und möchte den Code kürzen.
    Der Anwender gibt eine Zahl ein und drückt Enter.
    Dann gibt er eine zweite Zahl ein und drückt wieder Enter.
    Schließlich gibt er das Rechenzeichen (char) ein und drückt erneut Enter.

    Nun werte ich das Rechenzeichen mit einer IF-Anweisung aus.

    Funktioniert auch alles.
    Was aber tun, wenns in einer Zeile variabel errechnet werden soll?
    Hier beißen sich ja die Datentypen.

    Erst einmal die alte Version (natürlich ausbaufähig, läuft aber)

    #include<math.h>
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
          float z1,z2;
          char r[0];
          cout << "Zahl 1: ";
          cin >> z1;
          cout << "Zahl 2: ";
          cin >> z2;
          cout << "Rechenzeichen: ";
          cin >> r;
          if(strcmp(r,"+")==0)
          {
             cout << "Ergebnis: " << z1+z2;
          }
          if(strcmp(r,"-")==0)
          {
             cout << "Ergebnis: " << z1-z2;
          }
          if(strcmp(r,"*")==0)
          {
             cout << "Ergebnis: " << z1*z2;
          }
          if(strcmp(r,"/")==0)
          {
             cout << "Ergebnis: " << z1/z2;
          }
          getch();
    }
    

    So, nichts weltbewegendes also.

    Nun aber die Modifikation:

    #include<math.h>
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>
    main()
    {
          float z1,z2;
          char r[0];
          cout << "Zahl 1: ";
          cin >> z1;
          cout << "Zahl 2: ";
          cin >> z2;
          cout << "Rechenzeichen: ";
          cin >> r;
          cout << "Ergebnis: " << z1<<r<<z2; // gibt z.B. 3+4 aus
          getch();
    }
    

    Wie binde ich nun das Rechenzeichen r dort ein?
    Geht das überhaupt?

    Danke
    Dickus



  • Ich hab mal schnell etwas zusammengebastelt. Das ist zwar nicht kürzer, aber erweiterbar und wiederverwendbar.

    class Calculator
    {
    public:
    
    	Calculator()
    	{
    		for (int i = 0; i < 256; ++i)
    		{
    			m_methods[i] = &Calculator::invalidOperator;
    		}
    
    		m_methods[(unsigned char)'+'] = &Calculator::add;
    	}
    
    	bool calculate(int &out_result, int operand_1, int operand_2, char operator_)
    	{
    		return (this->*(m_methods[(unsigned char)operator_]))(out_result, operand_1, operand_2);
    	}
    
    private:
    
    	typedef bool (Calculator::*calcTypeMethod)(int&, int, int);
    
    	calcTypeMethod m_methods[256];
    
    	bool invalidOperator(int&, int, int)
    	{
    		return false;
    	}
    
    	bool add(int &out_result, int summand_1, int summand_2)
    	{
    		out_result = summand_1 + summand_2;
    		return true;
    	}
    };
    
    //Benutzung:
    	Calculator calc;
    	int result = 0;
    	if (calc.calculate(result, 3, 4, '+'))
    	{
    		cout << result << endl;
    		cin.get();
    	}
    

    Achja: Das Thema gehört eher in den C++-Bereich.



  • Dickus schrieb:

    Moinsen,
    habe einen Taschenrechner programmiert und möchte den Code kürzen.

    #include <windows.h>
    int main()
    {
        system("calc.exe");
        return 0;
    }
    

    mfg


Anmelden zum Antworten