BobKiller007 Geschrieben 13. Dezember 2009 Teilen Geschrieben 13. Dezember 2009 Hallöchen Community, ich habe ein kleines Programm entworfen, was ein paar Kleinigkeiten ausrechnen kann, wie ihr gleich sehen werdet. Doch bin ich leider mit meinem Latein am Ende gelangt und weiß nicht, wie ich die Fehlermeldungen loswerde. Könnt ihr mir bitte helfen, die Fehlermeldungen loszuwerden, (ich konnte die Anzahl zwar verringern, doch es sind immernoch ein paar da) so dass das Programm anwendbar ist? Könntet ihr mir auch bitte Tipps geben, wie ich das hätte besser aufschreiben können, oder verändern. Hier der Quellcode: // Körperberechner.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char** args) { double a; //Länge double b; //Breite double c; //Höhe double h; //Höhe Dreieck double k; //Körperhöhe double g; //Grundseite double r; //Radius double Pi=3,141; double up=g+b+c; //Umfang Prisma double uz=2*r*Pi; //Umfang Zylinder double M=up*k; //Mantel double Mz=uz*k; //Mantel Zylinder double Gp=g*h/2; //Grundfläche Prisma double Gz=r*r*Pi; //Grundfläche Zylinder double Vz=Gz*k; //Volumen Zylinder double Vp=Gp*k; //Volumen Prisma double Op=2*Gp+M; //Oberfläche Prisma double Oz=2*Gz+Mz; //Oberfläche Zylinder char e1, e2=0, Art; //Einheit int Neustart; char p, q, z; do { cout<<"Was m\x84 \bchten Sie berechnen:\n"; cout<<"Dreieckss\x94 \ble/Prisma [p]\n"; cout<<"Quader [q]\n"; cout<<"Zylinder [z]\n"; cin>> Art; switch(Art) { case p: cout<<"Dieses Programm errechnet Ihnen die Oberfl\x84 \bche und das Volumen einer Dreieckss\x84 \ble/Prisma.\n"; cout<<"Einheit:\t\t"; cin>> e1 >> e2; cout<<"Grundseite:\t\t"; cin >> g; cout<<"Seite b:\t\t"; cin >> b; cout<<"Seite c:\t\t"; cin >> c; cout<<"H\x94 \bhe:\t\t"; cin>> h; cout<<"K\x94 \brperh\x94 \bhe:\t\t"; cin>> k; cout<<"\n"; cout<< "Oberfl\x84 \bche:\t\t" << Op << " " << e1 << e2 <<"^2\n"; cout<< "Volumen:\t\t" << Vp << " " << e1 << e2 <<"^3\n"; break; case q: cout<<"Dieses Programm errechnet Ihnen die Oberfl\x84 \bche und das Volumen eines Quaders.\n"; cout<<"\n"; cout<<"Einheit:\t\t"; cin>> e1 >> e2; cout<<"L\x84 \bnge:\t\t"; cin >> a; cout<<"Breite:\t\t"; cin >> b; cout<<"H\x94 \bhe:\t\t"; cin >> c; cout<<"Oberfl\x84 \bche:\t"<< 2*a*b+2*a*c+2*b*c << " " << e1 << e2 <<"^2\n"; cout<<"Volumen:\t"<< a*b*c << " " << e1 << e2 <<"^3\n"; break; case z: cout<<"Dieses Programm errechnet Ihnen die Oberfl\x84 \bche und das Volumen eines Zylinders\n"; cout<<"\n"; cout<<"Einheit:\t\t"; cin>> e1 >> e2; cout<<"Radius:\t\t"; cin>> r; cout<<"K\x94 \brperh\x94 \bhe:\t\t"; cin>> k; cout<<"Oberfl\x84 \bche:\t\t" << Oz << " " << e1 << e2 <<"^2\n"; cout<<"Volumen:\t\t" << Vz << " " << e1 << e2 <<"^3\n"; break; default: cout<<"Ungueltige Eingabe!\n\n"; cout<<"M\x94 \bchten Sie es erneut versuchen?(1=Ja, 2=nein)\n\n\n"; cin >> Neustart; break; } } while(Neustart==1); cin.get(); cin.get(); return 0; } Hier die Fehlerbeschreibung: 1>------ Erstellen gestartet: Projekt: Körperberechner, Konfiguration: Debug Win32 ------ 1>Kompilieren... 1>Körperberechner.cpp 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(19) : error C2059: Syntaxfehler: 'Konstante' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(46) : error C2051: case-Ausdruck ist keine Konstante 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(64) : error C2051: case-Ausdruck ist keine Konstante 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(78) : error C2051: case-Ausdruck ist keine Konstante 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(96) : warning C4065: switch-Anweisung enthält 'default', aber keine case-Marken 1>Das Buildprotokoll wurde unter "file://d:\Eigene HTMLs\Körperberechner\Körperberechner\Debug\BuildLog.htm" gespeichert. 1>Körperberechner - 4 Fehler, 1 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== Entschuldigt bitte, falls der Code für euch extrem unleserlich auf Grund meiner Schreibweise ist. Ich bin noch ziemlich neu in diesem Gebiet und habe von daher noch nicht so viel Erfahrung. Dankeschön im voraus! LG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 13. Dezember 2009 Teilen Geschrieben 13. Dezember 2009 error C2059: Syntaxfehler: 'Konstante'Bei Fließkommakonstanten benutzt man den Punkt als Dezimaltrennzeichen. error C2051: case-Ausdruck ist keine KonstanteCase-Labels müssen compilezeit-konstante integrale Ausdrücke sein. Variablen dürfen da niemals stehen. Ist dir der Unterschied zwischen p und 'p' klar? warning C4065: switch-Anweisung enthält 'default', aber keine case-MarkenDas ist ein Folgefehler. Und noch etwas Grundsätzliches: double up=g+b+c; //Umfang PrismaDas funktioniert nicht so, wie du glaubst. Du kannst in Variablen keine Formeln hinterlegen, die dann automatisch berechnet werden, wenn du die anderen Variablen mit Werten befüllst. Diese Zuweisung bewirkt an genau dieser Stelle im Code eine Berechnung, nur steht zu diesem Zeitpunk noch gar nichts sinnvolles in g, b und c drin. Du musst also erst die Eingabewerte haben, dann kannst du rechnen. Dasselbe gilt für alle deine "Formeln". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BobKiller007 Geschrieben 13. Dezember 2009 Autor Teilen Geschrieben 13. Dezember 2009 Ist dir der Unterschied zwischen p und 'p' klar? Der Unterschied ist/war mir nicht klar, doch vom Zusammenhang her, kann ich mir etwas daraus erschließen. Soll ich die Rechnungen dann beim Ergebnis aufschreiben, also beispielsweise so: cout<< "Volumen:\t\t" << << //hier kommt dann die Rechnung rein. Wäre das eine Lösung, oder kann ich die Variablen auch erst hinterher deklarieren, also erst nachdem die Eingabe der einzelnen Werte erfolgt ist? Noch eine kleine Frage: In C++ wird auf Punkt- vor Strichrechnung etc. nicht beachtet, oder? Liest er alles von links nach rechts durch? Entschuldige, dass ich gleich so viele Fragen stelle. Ich bin erst 16 und würde später gerne Informatik studieren. Und jetzt versuche ich durch eBooks und Tutorials in die Sprache rein zu kommen. LG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 Der Unterschied ist/war mir nicht klar, doch vom Zusammenhang her, kann ich mir etwas daraus erschließen. p ist die Variable. 'p' das Ascii-Zeichen. Wäre das eine Lösung, oder kann ich die Variablen auch erst hinterher deklarieren, also erst nachdem die Eingabe der einzelnen Werte erfolgt ist? Kannst du, aber für sowas würde sich z.B. eine Funktion anbieten. In C++ wird auf Punkt- vor Strichrechnung etc. nicht beachtet, oder? Doch, aber extra Klammern schaden nie. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast sohndesraben Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 double Pi=3,141; Niemals in einer Variablendeklaration mit Komma arbeiten, sondern einen Punkt nutzen. => 3.141 Es hilft sehr, wenn du dir die einzelnen Funktionen mit TAB einrückst. Damit verliert man die Übersicht nicht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
BobKiller007 Geschrieben 14. Dezember 2009 Autor Teilen Geschrieben 14. Dezember 2009 Niemals in einer Variablendeklaration mit Komma arbeiten, sondern einen Punkt nutzen. => 3.141 Es hilft sehr, wenn du dir die einzelnen Funktionen mit TAB einrückst. Damit verliert man die Übersicht nicht. Das Komma und Punkt umgekehrt verwendet werden, vergesse ich manchmal. Ist halt reine Gewöhnungssache die Syntax. In Virtual C++ habe ich die TABs benutzt, doch wenn ich hier den Code kopiere, verschwinden sie leider wieder. Kannst du, aber für sowas würde sich z.B. eine Funktion anbieten. Leider weiß ich nicht, wie ich das anstellen soll. Ich habe das mal mit den Funktionen versucht, doch dadurch habe ich mir ein noch größeres Problem angeschafft. Ich überlege, ob ich die Variablen doch nicht erst nach Eingabe der einzelnen Werte daklarieren soll, doch dann hätte ich mehr Arbeit, weil ich das überall einzeln reinkopieren muss und hätte somit auch weniger Übersicht, weil dann mehr Code als nötig steht. Könntest du mir helfen, das mit den Funktionen geschickt anzustellen? Hier mein misslungener Versuch: // Körperberechner.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. // #include "stdafx.h" #include <iostream> using namespace std; double a; //Länge double b; //Breite double c; //Höhe double h; //Höhe Dreieck double k; //Körperhöhe double g; //Grundseite double r; //Radius double Pi=3.141; double up() { up=g+b+c; //Umfang Prisma return; } double uz() { uz=2*Pi*r; //Umfang Zylinder return; } double M() { M=up*k; //Mantel return; } double Mz() { Mz=uz*k; //Mantel Zylinder return; } double Gp() { Gp=g*h/2; //Grundfläche Prisma return; } double Gz() { Gz=r*r*Pi; //Grundfläche Zylinder return; } double Vz() { Vz=Gz*k; //Volumen Zylinder return; } double Vp() { Vp=Gp*k; //Volumen Prisma return; } double Op() { Op=2*Gp+M; //Oberfläche Prisma return; } double Oz() { Oz=2*Gz+Mz; //Oberfläche Zylinder return; } char e1, e2=0, Art; //Einheit int Neustart; char p, q, z; int main(int argc, char** args) { do { cout<<"Was m\x84 \bchten Sie berechnen:\n"; cout<<"Dreieckss\x94 \ble/Prisma [p]\n"; cout<<"Quader [q]\n"; cout<<"Zylinder [z]\n"; cin>> Art; switch(Art) { case 'p': cout<<"Dieses Programm errechnet Ihnen die Oberfl\x84 \bche und das Volumen einer Dreieckss\x84 \ble/Prisma.\n"; cout<<"Einheit:\t\t"; cin>> e1 >> e2; cout<<"Grundseite:\t\t"; cin >> g; cout<<"Seite b:\t\t"; cin >> b; cout<<"Seite c:\t\t"; cin >> c; cout<<"H\x94 \bhe:\t\t"; cin>> h; cout<<"K\x94 \brperh\x94 \bhe:\t\t"; cin>> k; cout<<"\n"; cout<< "Oberfl\x84 \bche:\t\t" << Op << " " << e1 << e2 <<"^2\n"; cout<< "Volumen:\t\t" << Vp << " " << e1 << e2 <<"^3\n"; break; case 'q': cout<<"Dieses Programm errechnet Ihnen die Oberfl\x84 \bche und das Volumen eines Quaders.\n"; cout<<"\n"; cout<<"Einheit:\t\t"; cin>> e1 >> e2; cout<<"L\x84 \bnge:\t\t"; cin >> a; cout<<"Breite:\t\t"; cin >> b; cout<<"H\x94 \bhe:\t\t"; cin >> c; cout<<"Oberfl\x84 \bche:\t"<< 2*a*b+2*a*c+2*b*c << " " << e1 << e2 <<"^2\n"; cout<<"Volumen:\t"<< a*b*c << " " << e1 << e2 <<"^3\n"; break; case 'z': cout<<"Dieses Programm errechnet Ihnen die Oberfl\x84 \bche und das Volumen eines Zylinders\n"; cout<<"\n"; cout<<"Einheit:\t\t"; cin>> e1 >> e2; cout<<"Radius:\t\t"; cin>> r; cout<<"K\x94 \brperh\x94 \bhe:\t\t"; cin>> k; cout<<"Oberfl\x84 \bche:\t\t" << Oz << " " << e1 << e2 <<"^2\n"; cout<<"Volumen:\t\t" << Vz << " " << e1 << e2 <<"^3\n"; break; default: cout<<"Ungueltige Eingabe!\n\n"; cout<<"M\x94 \bchten Sie es erneut versuchen?(1=Ja, 2=nein)\n\n\n"; cin >> Neustart; break; } } while(Neustart==1); cin.get(); cin.get(); return 0; } Hier die Fehlerbeschreibungen nach dem Kompilieren: 1>------ Erstellen gestartet: Projekt: Körperberechner, Konfiguration: Debug Win32 ------ 1>Kompilieren... 1>Körperberechner.cpp 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(21) : error C2659: "=": Funktion als linker Operand. 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(22) : error C2561: 'up': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(19): Siehe Deklaration von 'up' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(26) : error C2659: "=": Funktion als linker Operand. 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(27) : error C2561: 'uz': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(24): Siehe Deklaration von 'uz' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(31) : error C2296: '*': Ungültig, da der linke Operand vom Typ 'double (__cdecl *)(void)' ist 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(32) : error C2561: 'M': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(29): Siehe Deklaration von 'M' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(36) : error C2296: '*': Ungültig, da der linke Operand vom Typ 'double (__cdecl *)(void)' ist 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(37) : error C2561: 'Mz': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(34): Siehe Deklaration von 'Mz' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(41) : error C2659: "=": Funktion als linker Operand. 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(42) : error C2561: 'Gp': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(39): Siehe Deklaration von 'Gp' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(46) : error C2659: "=": Funktion als linker Operand. 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(47) : error C2561: 'Gz': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(44): Siehe Deklaration von 'Gz' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(51) : error C2296: '*': Ungültig, da der linke Operand vom Typ 'double (__cdecl *)(void)' ist 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(52) : error C2561: 'Vz': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(49): Siehe Deklaration von 'Vz' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(56) : error C2296: '*': Ungültig, da der linke Operand vom Typ 'double (__cdecl *)(void)' ist 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(57) : error C2561: 'Vp': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(54): Siehe Deklaration von 'Vp' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(61) : error C2297: '*': Ungültig, da der rechte Operand vom Typ 'double (__cdecl *)(void)' ist 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(62) : error C2561: 'Op': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(59): Siehe Deklaration von 'Op' 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(66) : error C2297: '*': Ungültig, da der rechte Operand vom Typ 'double (__cdecl *)(void)' ist 1>d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(67) : error C2561: 'Oz': Funktion muss einen Wert zurückgeben 1> d:\eigene htmls\körperberechner\körperberechner\körperberechner.cpp(64): Siehe Deklaration von 'Oz' 1>Das Buildprotokoll wurde unter "file://d:\Eigene HTMLs\Körperberechner\Körperberechner\Debug\BuildLog.htm" gespeichert. 1>Körperberechner - 20 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== Vielen Dank für die bisherige Hilfe!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 14. Dezember 2009 Teilen Geschrieben 14. Dezember 2009 In Virtual C++ habe ich die TABs benutzt, doch wenn ich hier den Code kopiere, verschwinden sie leider wieder.Benuzt CODE-Tags, nicht QUOTE. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 15. Dezember 2009 Teilen Geschrieben 15. Dezember 2009 (bearbeitet) Könntest du mir helfen, das mit den Funktionen geschickt anzustellen? Nukular, ein Beispiel: double up(double g, double b, double c) { return g+b+c; } Von globalen Variablen würde ich so und so die Finger lassen, bei größeren Programmen überblickt man das eh nicht mehr. Deswegen Parameterbenutzung. [Editerle] Der Aufruf später so in etwa: cout << "up: " << up(1, 2, 3) << endl; Bearbeitet 15. Dezember 2009 von TDM Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.