Frisch in C++ eingestiegen



  • Dieser Thread wurde von Moderator/in Jester aus dem Forum Mathematik in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • kannst mir das gern mal schicken, musst aber an mein emailadresse:

    ser1al(at)gmx(dot)de 🤡

    kann auf die links wegen unserer firewall nciht drauf...



  • Um anderen den Download zu ersparen, hier mal der Quellcode:

    [cpp]
    #include <cstdlip>
    #include <isostream>
    #include <math.h>
    
    using namespace std;
    
    int main (int argc, char *argv[])
    
    {
    
        float a,b,f;
        string d,z,x,e,y;
        double c;
    
        a=0;
        b=0;
    
        cout<< "***** Version 1.3 *****"<<endl<<endl<<endl;
    
        z:
        cout<< "Bitte wählen Sie eine Rechenoperation aus: * , / , - , + , Wurzel"<<endl;
        cin>>d;
    
        if(d=="*")
        goto z1;
        if(d=="/")
        goto z1;
        if(d=="-")
        goto z1;
        if(d=="+")
        goto z1;
        if(d=="wurzel")
        goto z2;
    
        else 
        cout<<"Falsche Eingabe!"<<endl;
        goto z;
    
        z1:
    
             if(d=="*")
             c = a * b;
             if(d=="/")
             c = a / b;
             if(d=="-")
             c = a - b;
             if(d=="+")
             c = a + b;
             if(d=="^")
             c = pow(a,b);
             goto y
    
        z2:
             cout<<"Geben Sie Zahl A ein!"<<endl;
             cin>>a;
             cout<<"Geben Sie Zahl B ein!"<<endl;
             cin>>b;
             f = 1/a;
             if(d=="wurzel")
             c = pow(b,f);
             cout << a <<"."<< d <<" aus "<<b<<" = "<< c <<endl;
             goto z3;
    
             //Ergebnis ausgeben
             y:
                        cout<< a << d << b <<" = "<< c<<endl;
    
             //Beenden
             z3:
                      cout<<"Wollen Sie das Programm beenden, dann geben Sie 'exit' ein!<<endl;
                      cout<<"Wollen Sie das Programm weiterführen, dann geben Sie 'lets go' ein!<<endl;
                      cin<<e;
                      if(e=="exit")
                      return EXIT_SUCCES;
                      if(e=="lets go")
                      goto z;
                      else
                      cout<<"Falsche Eingabe!"<<endl;
                      goto z3;
    
    }
    
    [/cpp]
    

    Anmerkungen:

    - In deinem Quellcode haben sich viele Rechtschreibfehler eingeschlichen! So dürfte dein Compiler zum Beispiel gleich bei

    [cpp]#include <cstdlip>[/cpp]
    

    meckern, da er diese Standardbibliothek nicht findet. Korrekt heißt diese nämlich

    [cpp]#include <cstdlib>[/cpp]
    

    - Auch die vielen goto - Anweisungen sind fehl am Platz...
    Wesentlich besser wäre hier zum Beispiel, alles in Schleifen zu packen, sodass sich das
    Programm einfacher aufbauen lässt.

    - Du könntest auch Funktionen, die Teilaufgaben berechnen ( zum Beispiel eine Summe ), außerhalb von main() deklarieren und definieren,
    beispielsweise in einer separaten Header - Datei. Diese kannst du einfach mit

    [cpp]#include "Headername"[/cpp]
    

    in dein Programm einbinden und somit alle Funktionen verwenden.
    Dein Hauptprogramm wäre dadurch viel übersichtlicher und leichter zu erweitern 🙂 .

    - Zu dem Programm allgemein:
    Wenn ich beispielsweise "*" eingebe, um 2 Zahlen zu multiplizieren,
    kommt sofort als Ergebnis "0". Der Benutzer hat keine Gelegenheit, Zahlen einzugeben.

    Außerdem wäre es als Benutzer praktischer, wenn man einen Ausdruck gleich in der Form "4 * 5 + 12 * ( 12 - 3 )" eingeben könnte,
    um ohne großen Aufwand gleich zu einem Ergebnis zu kommen.

    Demnächst werde ich eine verbesserte Form deines Quelltextes posten.

    Grüße, Bobby - Karle



  • #include <cstdlib>
    #include <isostream>
    #include <math.h>
    
    using namespace std;
    
    int main (int argc, char *argv[])
    
    {   
        float a,b,f;
        string d,z,x,e,y;
        double c;
    
        a=0;
        b=0;
    
        cout<< "***** Version 1.3 *****"<<endl<<endl<<endl;
    
        z:
        cout<< "Bitte wählen Sie eine Rechenoperation aus: * , / , - , + , Wurzel"<<endl;
        cin>>d;
    
        if(d=="*")
        goto z1;
        if(d=="/")
        goto z1;
        if(d=="-")
        goto z1;
        if(d=="+")
        goto z1;
        if(d=="wurzel")
        goto z2;
    
        else
        cout<<"Falsche Eingabe!"<<endl;
        goto z;
    
        z1:
             cout<<"Geben Sie Zahl A ein!"<<endl;
             cin>>a;
             cout<<"Geben Sie Zahl B ein!"<<endl;
             cin>>b;
    
             if(d=="*")
             c = a * b;
             if(d=="/")
             c = a / b;
             if(d=="-")
             c = a - b;
             if(d=="+")
             c = a + b;
             if(d=="^")
             c = pow(a,b);
             goto y
    
        z2:
             cout<<"Geben Sie Zahl A ein!"<<endl;
             cin>>a;
             cout<<"Geben Sie Zahl B ein!"<<endl;
             cin>>b;
             f = 1/a;
             if(d=="wurzel")
             c = pow(b,f);
             cout << a <<"."<< d <<" aus "<<b<<" = "<< c <<endl;
             goto z3;
    
             //Ergebnis ausgeben
             y:
                        cout<< a << d << b <<" = "<< c<<endl;
    
             //Beenden
             z3:
                      cout<<"Wollen Sie das Programm weiterführen? (y/n)" <<endl;
                      cin<<e;
                      if(e=="n")
                      return EXIT_SUCCESS;
                      if(e=="y")
                      goto z;
                      else
                      cout<<"Falsche Eingabe!"<<endl;
                      goto z3;
    
    }
    

    Gewöhn dir das goto ab ... das ist nämlich totaler Murks. Probiers lieber mal mit if, while oder do-while schleifen.

    hab die abfrage jetzt soweit geändert. bin mir allerdings nicht sicher ob bei vergleichen wie "if e==""" es nicht eher so sein müsste: if e==''.

    Außerdem weiß ich nicht ob man ganze Texte wie "Wurzel" in eine als string definierte Variable schreiben kann, da ich immer char Arrays benutze. Aber müsste eigentlich funktionieren.



  • rapi schrieb:

    Gewöhn dir das goto ab ... das ist nämlich totaler Murks. Probiers lieber mal mit if, while oder do-while schleifen.

    Kenau, aber bitte keine if-Schleifen... 😉

    rapi schrieb:

    hab die abfrage jetzt soweit geändert. bin mir allerdings nicht sicher ob bei vergleichen wie "if e==""" es nicht eher so sein müsste: if e==''.

    Nene, das geht schon so. e ist ein std::string, der hat einen überladenen Vergleichsoperator. Wäre e ein char hättest du Recht.

    rapi schrieb:

    Außerdem weiß ich nicht ob man ganze Texte wie "Wurzel" in eine als string definierte Variable schreiben kann

    Kann man.

    Noch ein paar Anmerkungen:
    - Benutze aussagekräftige Bezeichner. Die ersten Buchstaben des Alphabets gehören nicht dazu.
    - Beachte die Streamrichtung (aus cin geht der Strom raus (>>), in cout geht der Strom rein (<<))
    - Benutze die C++-Header (cmath statt math.h)
    - Wenn in der Operationenauflistung "Wurzel" steht, dann solltest du auch "Wurzel" abfragen...



  • danke erst mal für eure tipps einiges konnte ich umsetzen! danke,

    hey bobby - karle

    Zitat: Demnächst werde ich eine verbesserte Form deines Quelltextes posten.

    will mir mal deine verbesserte form ansehen wäre nett wenn du mir das schicken könntest, will mal sehen was alles so möglich ist! hoffe das du schon zeit gefunden hast das fertig zu machen meld dich mal wegen dem prog. in verbessert version

    thx all



  • Hallo,

    hier kommt nun eine verbesserte Form deines Programms. Ich habe versucht, es möglichst einfach zu halten und vieles zu kommentieren.
    Ich hoffe, dass man das Programm verstehen kann 🙂 .

    Der Aufbau erklärt sich eigentlich von selbst.

    [cpp]// Taschenrechner
    
    // includes
    #include<iostream>      // Ein - und Ausgabeoperationen
    #include<conio.h>       // Funktion 'getch()'
    
    using namespace std;
    
    // Funktionsprototypen ( global )
    
    /* Erklärung: Hier werden die im Programm verwendeten Funktionen deklariert,
                  das heißt dem Compiler "bekannt gemacht". Die Definition erfolgt
                  weiter unten.
    */
    
    double Addition(double x, double y);
    double Subtraktion(double x, double y);
    double Multiplikation(double x, double y);
    double Division(double x, double y);
    
    /* Die hier aufgelisteten Funktionen könntest du auch, wie schon erwähnt,
       in eine separate Headerdatei packen. Da diese Funktionen aber nicht sehr
       komplex sind, ist dies wohl eher umständlich als nützlich.
    */
    
    int main() {
        cout << "Taschenrechner" << endl << endl;
    
        // 1. Zahl ( Eingabe erfolgt wie in deinem Programm, Zahl für Zahl )
        double zahl_1;
        cout << "1. Zahl: ";
        cin >> zahl_1;
    
        // 2. Zahl
        double zahl_2;
        cout << "\n2. Zahl: ";
        cin >> zahl_2;
    
        // Operation
        char operation;
        cout << "\nOperation ( '+', '-', '*', '/' ): ";
        cin >> operation;
    
        // Auswertung der Eingabe
        double ergebnis = 0;
    
        switch(operation) {
            case '+' : ergebnis = Addition(zahl_1, zahl_2); break;
            case '-' : ergebnis = Subtraktion(zahl_1, zahl_2); break;
            case '*' : ergebnis = Multiplikation(zahl_1, zahl_2); break;
            case '/' : ergebnis = Division(zahl_1, zahl_2); break;
            default  : cout << "Ungueltige Eingabe" << endl; break;
        }
    
        // Anzeigen des Ergebnisses
        cout << "\n>> " << ergebnis << endl << endl;
    
        // Verhindern, dass sich die Konsole automatisch schließt
        getch();
    }
    
    // Funktionsimplementationen
    double Addition(double x, double y) {
        double summe = x + y;
        return summe;
    }
    
    double Subtraktion(double x, double y) {
        double differenz = x - y;
        return differenz;
    }
    
    double Multiplikation(double x, double y) {
        double produkt = x * y;
        return produkt;
    }
    
    double Division(double x, double y) {
        double quotient = x / y;
        return quotient;
    }
    
    /* Wie du siehst, sind die Funktionen nicht sehr komplex, aber sie machen
       das Programm wesentlich übersichtlicher.
    */[/cpp]
    

    Das Programm kann ziemlich leicht erweitert werden ( und das sollte es auch 🙂 ), um beispielsweise die Bedienung zu vereinfachen.
    Du könntest zum Beispiel die Eingabe der Zahlen usw. in eine Schleife packen, damit man das Programm nicht für jede Berechnung neu starten muss.
    Die Schleife würde erst dann enden, wenn man beispielsweise das Zeichen 'e' eingibt.

    Auch die Überprüfung auf falsche Eingaben überlasse ich dir als Übung 🙂 .

    Grüße, Bobby - Karle



  • ein sehr sehr großes danke schön an bobby karle thx für deine hilfe

    mfg berliner



  • Man könnte die Funktionen:

    double Addition(double x, double y);
    double Subtraktion(double x, double y);
    double Multiplikation(double x, double y);
    double Division(double x, double y);
    

    noch inline definieren 😉 ...nur so BTW 😉 .



  • Ja stimmt, bei solch kleinen Funktionen würde es sich anbieten, aber ich glaube nicht, dass dadurch ein richtiger Performance - Schub eintritt 🙂 .

    Berliner schrieb:

    ein sehr sehr großes danke schön an bobby karle thx für deine hilfe

    mfg berliner

    Gern geschehen 🙂 . Dafür ist das Forum da.

    Bobby - Karle


Anmelden zum Antworten