Hilfe mit Rechner



  • Hallo C++ Forum....
    Ich bin ein Einsteiger in C++ und versuche mich gerade an einem Rechner...
    Mit Hilfe eines Tutorials habe ich angefangen.... Nun sieht er schon ganz nett aus 🙂 Nur ich versuchte den Satz des Phytagoras einzubindne und jetzt gibt mein Compiler viele Fehler aus....

    #include <iostream>                  //steht im Grunde genommen immer da!
    #include <math.h>                    //der header wird fur bestimmte mathematische operationen gebraucht
    #include <windows.h>
    
    using namespace std;                  //steht auch immer da!!
    // C++-Version:
    const unsigned char AE = static_cast<unsigned char>(142);
    const unsigned char ae = static_cast<unsigned char>(132);
    const unsigned char OE = static_cast<unsigned char>(153);
    const unsigned char oe = static_cast<unsigned char>(148);
    const unsigned char UE = static_cast<unsigned char>(154);
    const unsigned char ue = static_cast<unsigned char>(129);
    const unsigned char ss = static_cast<unsigned char>(225);
    int i;
    int k;
    int menu() {                     //Der ubersichtlichkeit halber machen wir ein modul
    
    cout << "\n\t<---------Taschenrechner----------->"    //das /n heist neue zeile /t einen tab sprung vorgehen in der zeile
         << "\n\t(1) Addieren"                //jetz haben wir auch ein etwas ubersichtlicheres menu
         << "\n\t(2) Subtrahieren"
         << "\n\t(3) Multiplizieren"
         << "\n\t(4) Diviedieren"
         << "\n\t(5) Potenz"
         << "\n\t(6) Wurzel"
         << "\n\t(7) Heronverfahren"
         << "\n\t(8) Satz des Pythagoras"
         << "\n\t<----------------------------------->\n";
    cin >> i;                        //eingabe der auswahl ist ist ja oben deklariert worden
    return i;                        //wichtig damit wir i in userer haupfunktion benutzen können
    }
    
    int main() {                        //hauptmenu sozusagen
    
    bool quit=false;  //eine ja/nein variable
    long double c, d, z, again;
    char j;             
    int schluss;                        //zum beenden das kennen wir ja schon
    long double a, b;
    int aus=menu();                        //damit wir wissen was ausgewäehlt wurde
    do {                            //do schleife damit bestimmte dinge wiederhollt werden
    switch (aus) {                        //bedingungs schleife
        case 1:                    
        case 2:
        case 3:                        //wir sparen uns schreibarbeit^^
        case 4:
    
            cout << "\n\n\tBitte erste Zahl eingeben\n";
            cin >> a;
            cout << "\n\n\tBitte zweite Zahl eingeben\n";
            cin >> b;
            switch(aus) {                            //nochmal das selbe nur jetz einzeln
    
                case 1: cout << "\n\t" << a << " + " << b << " = " << a + b << endl; break;    //plus
                      case 2: cout << "\n\t" << a << " - " << b << " = " << a - b << endl; break;    //minus
                      case 3: cout << "\n\t" << a << " * " << b << " = " << a * b << endl; break;    //mal
                      case 4: cout << "\n\t" << a << " / " << b << " = " << a / b << endl; break;    //geteilt
            }
        quit=true;                                //beenden auf wahr setzen
        break;                        //das break nicht vergessen sonst gehts ins unendliche^^
        case 5:
        case 6:
    
            cout << "\n\n\tBitte Zahl eingeben\n";
            cin >> a;
             c = a-1;
                     for(z=1; z < 100; z++)
                     {
                     d = 0.5*(c+a/c);
    
                     }
            switch (aus) {                        //nochmal das kennen wir ja schon^^
    
                case 5: cout << "\n\t" << a << " zum quadrat ist =" << a*a << endl; break;    //hochrechnen
                case 6:    cout << "\n\tDie Wurzel von " << a <<  "=" << sqrt(a) << endl; break;
    
    //dafur brauchen wir math.h denn sonst konnte man keine wurzel ziehen
    
            }                    //bedingung schliesen
        quit=true;                    //nochmal beenden auf wahr
        break;                        //Break nicht vergessen
        case 7:
             cout << "\n\n\tBitte Zahl eingeben\n";
            cin >> a;
             c = a-1;
                     for(z=1; z < 100; z++)
                     {
                     d = 0.5*(c+a/c);
    
                     }
                     switch (aus) {   
                     case 7: cout <<"\n\t Die Naeherung an die Quadratwurzel von " << a << " ergab " << d << endl; break;
                    }
                      quit=true;                    //nochmal beenden auf wahr
        break;
            case 8:
    int Phythagoras() {
             cout << "\n\t<---------Auswahl----------->"    //das /n heist neue zeile /t einen tab sprung vorgehen in der zeile
         << "\n\t(1) Kathete [a]"                //jetz haben wir auch ein etwas ubersichtlicheres menu
         << "\n\t(2) Kathete [b]"
         << "\n\t(3) Hypotenuse [c]"
         << "\n\t<----------------------------------->\n";
         cin >> k;  
         return k;
         }
         int PH=Phythagoras(); 
           switch (aus)
           {
                  case 8:
                     switch (PH) {
    
                     case 1: cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [b] ein";
                     cin>> a;
                     cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Hypotenuse [c] ein";
                     cin >> b;
                     cout<<"Die Länge der Kathete [a] ergab "<< sqrt((a*a)-(b*b)) <<endl; break;
                     case 2: cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [a] ein";
                     cin>> a;
                     cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Hypotenuse [c] ein";
                     cin >> b;
                     cout<<"Die Länge der Kathete [a] ergab "<< sqrt((a*a)-(b*b)) <<endl; break;
                    case 3: cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [a] ein";
                     cin>> a;
                     cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [b] ein";
                     cin >> b;
                     cout<<"Die Länge der Kathete [a] ergab "<< sqrt((a*a)+(b*b)) <<endl; break;
    
                    }}
                      quit=true;                    //nochmal beenden auf wahr
        break;
    
        default:
            cout << "\n\tFalsche eingabe";            //Bei falscher eingabe
        break;
    
                               //Klamer von hauptbedingung schliesen
    
    } 
     }
    
    while(!quit);
    cout<<"Willst du die Anwendung erneut starten? (y oder n) ";
    
    cin>>j;
    if((j=='Y')||(j=='y')) {
    
    WinExec("Rechner.exe", SW_SHOW);
    
    exit(1);
    
    } else {
    if((j=='N')||(j=='n'))
    {}
    //Schließen
    
    }
    if((j!='N') && (j!='n') && (j!='Y') && (j!='y'))
    { 
    cout<<"\n\nFalsche Eingabe!\n";
    system("pause");
        }
        }
    

    DIe Fehler lauten:
    C:\Users\Michael\Documents\C++\Rechner.cpp In function int main()': 102 C:\\Users\\Michael\\Documents\\C++\\Rechner.cpp expected primary-expression before "int" 102 C:\\Users\\Michael\\Documents\\C++\\Rechner.cpp expected;' before "int"
    111 C:\Users\Michael\Documents\C++\Rechner.cpp Phythagoras' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.) 140 C:\\Users\\Michael\\Documents\\C++\\Rechner.cpp jump to case label 111 C:\\Users\\Michael\\Documents\\C++\\Rechner.cpp crosses initialization ofint PH'

    ICh kann mit den Fehlern leider nicht viel anfangen 😞 Aber ich hoffe ihr helft mir!!



  • Nimm mal die Pythagoras Funktion aus dem switch raus.

    #edit: Das eliminiert die obere Hälfte deiner Fehler.
    Das mit der "cross initialization blah" kommt daher, dass du in einem Switch Statement hinter einem case Label entweder {} - Klammern nehmen musst oder aufs Variablen deklarieren im Switch Block verzichten musst.

    Das mit dem WinExec(...) halte ich übrigens für sehr schlechten Stil, da gehört eine Schleife um den ganzen Block.
    Ansonsten würde ich empfehlen noch mehr vom Code in Funktionen auszulagern und weniger "sinnfreie" Kommentare.

    #include <iostream>                  //steht im Grunde genommen immer da!
    

    Sinn?



  • Nimm mal die Pythagoras Funktion aus dem switch raus.

    Wie meinst du das?
    Das mit den Kommentaren hab ich nur so gemacht, weil ich da noch gerade angefangen habe und das dfie selbe Dati war wie die wo ich meine erste Hello World ausgabe gemacht habe....



  • int Phythagoras() {
             cout << "\n\t<---------Auswahl----------->"    //das /n heist neue zeile /t einen tab sprung vorgehen in der zeile
         << "\n\t(1) Kathete [a]"                //jetz haben wir auch ein etwas ubersichtlicheres menu
         << "\n\t(2) Kathete [b]"
         << "\n\t(3) Hypotenuse [c]"
         << "\n\t<----------------------------------->\n";
         cin >> k;  
         return k;
         }
    

    Den Teil rauskopieren aus case 8 und ganz oben als eigene Funktion einfügen.
    Dann schreibst du noch statt int PH = .... PH = ... und packst das int PH; ganz an den Anfang der main Funktion wo du auch noch die anderen Variablen deklarierst.



  • Ok ich habe jetzt leider irgendwas falsch gemacht...
    Jetzt zeigt er an:
    18 C:\Users\Michael\Documents\C++\Rechner.cpp ISO C++ forbids declaration of `Phythagoras' with no type

    Hier mal mein momentaner Code:

    #include <iostream>                  //steht im Grunde genommen immer da!
    #include <math.h>                    //der header wird fur bestimmte mathematische operationen gebraucht
    #include <windows.h>
    
    using namespace std;                  //steht auch immer da!!
    // C++-Version:
    const unsigned char AE = static_cast<unsigned char>(142);
    const unsigned char ae = static_cast<unsigned char>(132);
    const unsigned char OE = static_cast<unsigned char>(153);
    const unsigned char oe = static_cast<unsigned char>(148);
    const unsigned char UE = static_cast<unsigned char>(154);
    const unsigned char ue = static_cast<unsigned char>(129);
    const unsigned char ss = static_cast<unsigned char>(225);
    int i;
    int k;
    Phythagoras() {
             cout << "\n\t<---------Auswahl----------->"    //das /n heist neue zeile /t einen tab sprung vorgehen in der zeile
         << "\n\t(1) Kathete [a]"                //jetz haben wir auch ein etwas ubersichtlicheres menu
         << "\n\t(2) Kathete [b]"
         << "\n\t(3) Hypotenuse [c]"
         << "\n\t<----------------------------------->\n";
         cin >> k;  
         return k;
         }
    int menu() {                     //Der ubersichtlichkeit halber machen wir ein modul
    
    cout << "\n\t<---------Taschenrechner----------->"    //das /n heist neue zeile /t einen tab sprung vorgehen in der zeile
         << "\n\t(1) Addieren"                //jetz haben wir auch ein etwas ubersichtlicheres menu
         << "\n\t(2) Subtrahieren"
         << "\n\t(3) Multiplizieren"
         << "\n\t(4) Diviedieren"
         << "\n\t(5) Potenz"
         << "\n\t(6) Wurzel"
         << "\n\t(7) Heronverfahren"
         << "\n\t(8) Satz des Pythagoras"
         << "\n\t<----------------------------------->\n";
    cin >> i;                        //eingabe der auswahl ist ist ja oben deklariert worden
    return i;                        //wichtig damit wir i in userer haupfunktion benutzen können
    }
    
    int main() {                        //hauptmenu sozusagen
    
    bool quit=false;  //eine ja/nein variable
    long double c, d, z, again;
    char j;             
    int schluss;                        //zum beenden das kennen wir ja schon
    long double a, b;
    int aus=menu(); 
      int PH=Phythagoras();                        //damit wir wissen was ausgewäehlt wurde
    do {                            //do schleife damit bestimmte dinge wiederhollt werden
    switch (aus) {                        //bedingungs schleife
        case 1:                    
        case 2:
        case 3:                        //wir sparen uns schreibarbeit^^
        case 4:
    
            cout << "\n\n\tBitte erste Zahl eingeben\n";
            cin >> a;
            cout << "\n\n\tBitte zweite Zahl eingeben\n";
            cin >> b;
            switch(aus) {                            //nochmal das selbe nur jetz einzeln
    
                case 1: cout << "\n\t" << a << " + " << b << " = " << a + b << endl; break;    //plus
                      case 2: cout << "\n\t" << a << " - " << b << " = " << a - b << endl; break;    //minus
                      case 3: cout << "\n\t" << a << " * " << b << " = " << a * b << endl; break;    //mal
                      case 4: cout << "\n\t" << a << " / " << b << " = " << a / b << endl; break;    //geteilt
            }
        quit=true;                                //beenden auf wahr setzen
        break;                        //das break nicht vergessen sonst gehts ins unendliche^^
        case 5:
        case 6:
    
            cout << "\n\n\tBitte Zahl eingeben\n";
            cin >> a;
             c = a-1;
                     for(z=1; z < 100; z++)
                     {
                     d = 0.5*(c+a/c);
    
                     }
            switch (aus) {                        //nochmal das kennen wir ja schon^^
    
                case 5: cout << "\n\t" << a << " zum quadrat ist =" << a*a << endl; break;    //hochrechnen
                case 6:    cout << "\n\tDie Wurzel von " << a <<  "=" << sqrt(a) << endl; break;
    
    //dafur brauchen wir math.h denn sonst konnte man keine wurzel ziehen
    
            }                    //bedingung schliesen
        quit=true;                    //nochmal beenden auf wahr
        break;                        //Break nicht vergessen
        case 7:
             cout << "\n\n\tBitte Zahl eingeben\n";
            cin >> a;
             c = a-1;
                     for(z=1; z < 100; z++)
                     {
                     d = 0.5*(c+a/c);
    
                     }
                     switch (aus) {   
                     case 7: cout <<"\n\t Die Naeherung an die Quadratwurzel von " << a << " ergab " << d << endl; break;
                    }
                      quit=true;                    //nochmal beenden auf wahr
        break;
            case 8:
    
           switch (aus)
           {
                  case 8:
                     switch (PH) {
    
                     case 1: cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [b] ein";
                     cin>> a;
                     cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Hypotenuse [c] ein";
                     cin >> b;
                     cout<<"Die Länge der Kathete [a] ergab "<< sqrt((a*a)-(b*b)) <<endl; break;
                     case 2: cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [a] ein";
                     cin>> a;
                     cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Hypotenuse [c] ein";
                     cin >> b;
                     cout<<"Die Länge der Kathete [a] ergab "<< sqrt((a*a)-(b*b)) <<endl; break;
                    case 3: cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [a] ein";
                     cin>> a;
                     cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Kathete [b] ein";
                     cin >> b;
                     cout<<"Die Länge der Kathete [a] ergab "<< sqrt((a*a)+(b*b)) <<endl; break;
    
                    }}
                      quit=true;                    //nochmal beenden auf wahr
        break;
    
        default:
            cout << "\n\tFalsche eingabe";            //Bei falscher eingabe
        break;
    
                               //Klamer von hauptbedingung schliesen
    
    } 
     }
    
    while(!quit);
    cout<<"Willst du die Anwendung erneut starten? (y oder n) ";
    
    cin>>j;
    if((j=='Y')||(j=='y')) {
    
    WinExec("Rechner.exe", SW_SHOW);
    
    exit(1);
    
    } else {
    if((j=='N')||(j=='n'))
    {}
    //Schließen
    
    }
    if((j!='N') && (j!='n') && (j!='Y') && (j!='y'))
    { 
    cout<<"\n\nFalsche Eingabe!\n";
    system("pause");
        }
        }
    


  • Vor deine Funktion Pythagoras() {...} muss das int wieder davor.
    Dann, schreibst du an der Stelle wo jetzt int PH = ... steht int PH; hin.
    In case 8: schreibst du dafür PH = Pythagoras(); rein.



  • Dürfte ich fragen, was folgernder Code bezwecken soll?

    // C++-Version:
    const unsigned char AE = static_cast<unsigned char>(142);
    const unsigned char ae = static_cast<unsigned char>(132);
    const unsigned char OE = static_cast<unsigned char>(153);
    const unsigned char oe = static_cast<unsigned char>(148);
    const unsigned char UE = static_cast<unsigned char>(154);
    const unsigned char ue = static_cast<unsigned char>(129);
    const unsigned char ss = static_cast<unsigned char>(225);
    


  • Vielen Dank für die schnelle Hilfe!!! Jetzt geht alles 🙂

    const unsigned char ae = static_cast<unsigned char>(132);
    const unsigned char OE = static_cast<unsigned char>(153);
    const unsigned char oe = static_cast<unsigned char>(148);
    const unsigned char UE = static_cast<unsigned char>(154);
    const unsigned char ue = static_cast<unsigned char>(129);
    const unsigned char ss = static_cast<unsigned char>(225);

    Dieser Code bezwegt das ich die sonderzeichen in Form von Variablen angeben kann wie Z.B. hier:

    cout <<"\n\t Bitte geben sie die L"<< ae <<"nge der Hypotenuse [c] ein";
    




  • Und warum dann nicht gleich das korrekte locale setzen?

    std::locale::global(std::locale("german"));
    

    Funktioniert problemlos unter MSVS 2010 RC

    Bei anderen Compilern lauten die locale-Strings evtl. anders.


Log in to reply