Zum Inhalt springen

Letzter Schliff meines kleinen Programms


BobKiller007

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

error C2059: Syntaxfehler: 'Konstante'
Bei Fließkommakonstanten benutzt man den Punkt als Dezimaltrennzeichen.

error C2051: case-Ausdruck ist keine Konstante
Case-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-Marken
Das ist ein Folgefehler.

Und noch etwas Grundsätzliches:

double up=g+b+c; //Umfang Prisma
Das 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".

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gast sohndesraben
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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von TDM
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...