Problem mit programmierung von Rechner über dev C++


  • Mod

    if (k1='+') ist eine Zuweisung. Vergleichen tut man in C* mit ==. Compiliere immer mit allen Warnoptionen, dann wärst du nämlich vor diesem Fehler und vor dem den Belli dir genannt hat gewarnt worden und hättest deine Probleme sofort selber lösen können.

    *: Bis auf eine Zeile die du gar nicht benutzt ist dein Programm C, kein C++.



  • Du hast in den if()-Anweisungen keine Vergleiche, sondern Zuweisungen. Der Vergleich erfolgt mit ==

    jannipanni schrieb:

    PS: Das system ("PAUSE"); muss an jedem Ende sein, weil er mir sonst das Ergebnis von +-*/ gleichzeitig anzeigt.

    Dazu sage ich jetzt mal nichts.

    PS: sfds



  • Also

    1. Code hübsch formatieren lassen (markieren und dann button C/C++)

    2. Du solltest gleich eine Funktion schreiben, die als Übergabeparameter das Rechenzeichen nimmt und als Rückgabe das Ergebniss liefert, so sparst du dir sehr viel Platz und das ist gleich viel praktischer.

    Mein Vorschlag:

    #include <iostream>
    
    using namespace std;
    
    float calculate(int a, int b, char Rechenzeichen){
    
        if(Rechenzeichen == '+')
            return a+b;
        else if(Rechenzeichen == '-')
            return a-b;
        else if(Rechenzeichen == '/')
            return a/b;
        else if(Rechenzeichen == '*')
            return a*b;
    }
    
    int main(void){
    
    	cout<<"Rechner \n"<<endl;
    
    	int Wert_1,Wert_2;
    	char RZeichen;
    
    	cout<<"Bitte Wert 1 eingeben: ";
    	cin>>Wert_1;
    
    	cout<<"Bitte Rechenzeichen eingeben: ";
    	cin>>RZeichen;
    
    	cout<<"Bitte Wert 2 eingeben: ";
    	cin>>Wert_2;
    
    	cout<<"\nErgebniss: "<<calculate(Wert_1,Wert_2,RZeichen)<<endl;
    
    	return 0;
    }
    

    edit: upps, zu spät. Schon verschoben 😡



  • SeppJ schrieb:

    *: Bis auf eine Zeile die du gar nicht benutzt ist dein Programm C, kein C++.

    Und trotzdem reicht so eine Zeile aus, um meinen Compiler völlig zu verwirren. Ob das C-Forum deshalb an Qualität verliert, weil wir es leid sind, solche Zeilen händisch zu entfernen?


  • Mod

    µngbd schrieb:

    Und trotzdem reicht so eine Zeile aus, um meinen Compiler völlig zu verwirren. Ob das C-Forum deshalb an Qualität verliert, weil wir es leid sind, solche Zeilen händisch zu entfernen?

    Und im C++-Forum bekommt er das gleiche zu hören. Der Threadersteller hat nun einmal keine Ahnung, wo der Unterschied ist und was er falsch macht, aber von dem wie es aussieht, möchte er wohl C machen.





  • Kommt auf die Version an.

    Es gibt eine neue Version seit dem 16.07.2011.
    Siehe auch http://www.c-plusplus.net/forum/290329



  • DirkB schrieb:

    Kommt auf die Version an.

    Es gibt eine neue Version seit dem 16.07.2011.
    Siehe auch http://www.c-plusplus.net/forum/290329

    Danke für den Hinweis. Habe die FAQ aktualisiert.



  • Hacker schrieb:

    float calculate(int a, int b, char Rechenzeichen){
    
        if(Rechenzeichen == '+')
            return a+b;
        else if(Rechenzeichen == '-')
            return a-b;
        else if(Rechenzeichen == '/')
            return a/b;
        else if(Rechenzeichen == '*')
            return a*b;
    }
    

    Diese Funktion arbeitet nicht so, wie du es dir mit dem float-Rückgabewert suggerierst.



  • Wutz schrieb:

    Diese Funktion arbeitet nicht so, wie du es dir mit dem float-Rückgabewert suggerierst.

    #include <complex>
    
    ...
    
    float calculate(float a, float b, char Rechenzeichen){
    
        if     (Rechenzeichen == '+')return abs(a+b);
        else if(Rechenzeichen == '-')return abs(a-b);
        else if(Rechenzeichen == '/')return abs(a/b);
        else if(Rechenzeichen == '*')return abs(a*b);
    }
    

    Jetzt schon.

    🕶



  • Jetzt schon.

    🕶

    Äh, nö...

    Hacker schrieb:

    #include <complex>
    

    Aja, in C ned. abs() is wenn schon in stdlib .h ... aber wozu überhaupt?

    float a = 1.3f, b = 0.7f;
    char ch = '+';
    
    printf( "%f %c %f = %f\n", a, ch, b, calculate( a, b, ch ) );
    

    -> 1.300000 + 0.700000 = 1.000000


Anmelden zum Antworten