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 functionint 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.cppPhythagoras' 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 of
int 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 typeHier 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";
-
Hintergrund ist Extended ASCII:
http://en.wikipedia.org/wiki/Extended_ASCII
http://www.cdrummond.qc.ca/cegep/informat/Professeurs/Alain/files/ascii.htm
-
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.