Fehler beim compilieren (z-undeclared...)

PraxX

Grünschnabel
So ich hab mir hier grade für ein Protokoll einen Rechner gebastelt

Code:
#include <iostream>
using namespace std;

int main() {
    cout<<"Brennweitenberechnung nach Bessel"<<endl;
	cout<<"Gib die Werte ein (statt Komma bitte Punkt!)"<<endl;
	cout<<"bestaetige mit 'Enter'"<<endl;
	cout<<"g1:"<<endl;
	double g;
	cin>>g;
	cout<<"b1:"<<endl;
	double b;
	cin>>b;
	double x=b;
	cout<<"g2:"<<x<<endl;
	cout<<"..."<<endl;
	double e=g+b;
	cout<<"e: "<<e<<endl;
	double h=x-g;
	double const U=0;
if(h<U)
    double z=h*(-1);
    cout<<"d: "<<z<<endl;
	cout<<"..."<<endl;
	double l=((e*e)-(z*z))/(4*e);
	cout<<"Brennweite:"<<l<<endl;
	cout<<"..."<<endl;
	cout<<"Eigentliche Brennweite:"<<endl;
	int q;
	cin>>q;
	double r=q-l;
	cout<<"Abweichung: "<<r<<endl;
else
	cout<<"d: "<<h<<endl;
	cout<<"..."<<endl;
	double f=((e*e)-(h*h))/(4*e);
	cout<<"Brennweite:"<<f<<endl;
	cout<<"..."<<endl;
	cout<<"Eigentliche Brennweite:"<<endl;
	int p;
	cin>>p;
	double j=p-f;
	cout<<"Abweichung: "<<j<<endl;
	cout<<"Druecke 1 um das Programm zu beenden"<<endl;
	int c;
	cin>>c;
if(c==1)
    return 0;
else
    return 1;	
}

Das sind die Fehler die beim compilieren auftreten
Ich mach die ganze Geschichte halt noch nicht so lang und weiß echt nicht was ich da falsch gemacht hab
Code:
--------------------Configuration: Besselverfahren - Debug--------------------
Compiling source file(s)...
Besselverfahren.cpp
Besselverfahren.cpp: In function `int main()':
Besselverfahren.cpp:22: warning: unused variable `double z'
Besselverfahren.cpp:23: error: `z' undeclared (first use this function)
Besselverfahren.cpp:23: error: (Each undeclared identifier is reported only
once for each function it appears in.)
Besselverfahren.cpp:33: error: syntax error before `else'

Besselverfahren.exe - 3 error(s), 1 warning(s)

thx

ps
Die If anweisung hab ich eingebaut, dass kein negatiever Wert für d rauskommt.
Ich wusste nicht wie ich das sonst hätte lösen können.
 
Das Zauberwort heißt "geschweifte Klammer" (ok sind 2 Wörter :-) )
Der Compiler reagiert hier korrekt, da z in Zeile 23 verwendet wird aber nicht in diesem sog. Scope deklariert wird.
Ich denke mal das dein Code so sein sollte:
Code:
#include <iostream>
using namespace std;

int main() {
    cout<<"Brennweitenberechnung nach Bessel"<<endl;
	cout<<"Gib die Werte ein (statt Komma bitte Punkt!)"<<endl;
	cout<<"bestaetige mit 'Enter'"<<endl;
	cout<<"g1:"<<endl;
	double g;
	cin>>g;
	cout<<"b1:"<<endl;
	double b;
	cin>>b;
	double x=b;
	cout<<"g2:"<<x<<endl;
	cout<<"..."<<endl;
	double e=g+b;
	cout<<"e: "<<e<<endl;
	double h=x-g;
	double const U=0;
if(h<U)
{
    double z=h*(-1);
    cout<<"d: "<<z<<endl;
	cout<<"..."<<endl;
	double l=((e*e)-(z*z))/(4*e);
	cout<<"Brennweite:"<<l<<endl;
	cout<<"..."<<endl;
	cout<<"Eigentliche Brennweite:"<<endl;
	int q;
	cin>>q;
	double r=q-l;
	cout<<"Abweichung: "<<r<<endl;
}
else
{
	cout<<"d: "<<h<<endl;
	cout<<"..."<<endl;
	double f=((e*e)-(h*h))/(4*e);
	cout<<"Brennweite:"<<f<<endl;
	cout<<"..."<<endl;
	cout<<"Eigentliche Brennweite:"<<endl;
	int p;
	cin>>p;
	double j=p-f;
	cout<<"Abweichung: "<<j<<endl;
}
	cout<<"Druecke 1 um das Programm zu beenden"<<endl;
	int c;
	cin>>c;
if(c==1)
    return 0;
else
    return 1;	
}

Nach einem if oder else wird genau eine Anweisung ausgeführt, sollen mehrere Anweisungen ausgeführt werden, wenn eine Bedingung zutrifft, dann MUSS das ganze in einem Block (innerhalt {} ) zusammengefasst werden.
Dies gilt auch für while, do und andere Schlüsselwörter.

Daniel
 
Eine kleine Frage hab ich noch jetzt da es funktioniert

Wie kann man das ganze nochmal von vorne beginnen lassen, dass ich das Prog nicht immer neu starten muss?
 
Du packst das ganze in ne while()-Schleife und lässt die so lange laufen, bis z.B. "Escape" gedrückt wird.

greetz
daddz
 
danke aber wie gesagt das ist ziehmliches neuland für mich
kommt da vor das int main... dann while() {
 
PraxX hat gesagt.:
Code:
	cout<<"Druecke 1 um das Programm zu beenden"<<endl;
	int c;
	cin>>c;
if(c==1)
    return 0;
else
    return 1;	
}

Was soll das eigentlich machen? Es wird sowieso Beendet.
PraxX hat gesagt.:
danke aber wie gesagt das ist ziehmliches neuland für mich
kommt da vor das int main... dann while() {

So sollte es dann aussehen
Code:
#include <iostream>
using namespace std;

int main() {
    do
    {
        cout<<"Brennweitenberechnung nach Bessel"<<endl;

        //
        // Hier das ganze Zeug
        //

	cout<<"Druecke 1 um das Programm zu beenden"<<endl;
	int c;
	cin>>c;
    }while ( c != 1);
    return 0;
}

Die do-while Schleife führt den Code, der in der Schleife steht mindestens einmal aus.
Dann prüft sie ob c != 1. Wenn c != 1, wurde keine 1 eingegeben und die Schleife beginnt wieder von Forne :p
 
Entweder ich hab schon wieder was verbockt oder das von dir ist falsch

So sieht es jetzt aus:
Code:
#include <iostream>
using namespace std;



int main() {
	do
	{
        cout<<"Brennweitenberechnung nach Bessel"<<endl;
	    cout<<"Gib die Werte ein (statt Komma bitte Punkt!)"<<endl;
	    cout<<"bestaetige mit 'Enter'"<<endl;
	    cout<<"g1:"<<endl;
	    double g;
	    cin>>g;
		cout<<"b1:"<<endl;
	    double b;
	    cin>>b;
	    double x=b;
	    cout<<"g2:"<<x<<endl;
	    cout<<"..."<<endl;
	    double e=g+b;
	    cout<<"e: "<<e<<endl;
	    double h=x-g;
	    double const U=0;
if(h<U)
{
        double z=h*(-1);
        cout<<"d: "<<z<<endl;
	    cout<<"..."<<endl;
	    double l=((e*e)-(z*z))/(4*e);
	    cout<<"Brennweite:"<<l<<endl;
	    cout<<"..."<<endl;
	    cout<<"Eigentliche Brennweite:"<<endl;
	    int q;
	    cin>>q;
	    double r=q-l;
	    cout<<"Abweichung: "<<r<<endl;
}
else
{
	    cout<<"d: "<<h<<endl;
	    cout<<"..."<<endl;
	    double f=((e*e)-(h*h))/(4*e);
	    cout<<"Brennweite:"<<f<<endl;
	    cout<<"..."<<endl;
	    cout<<"Eigentliche Brennweite:"<<endl;
	    int p;
	    cin>>p;
	    double j=p-f;
	    cout<<"Abweichung: "<<j<<endl;
}
	    cout<<"Druecke 1 um das Programm zu beenden"<<endl;
	    int c;
		cin>>c;
    }while ( c != 1);
    return 0;
}

Und diese Fehler kommen:
Code:
--------------------Configuration: Besselverfahren - Debug--------------------
Compiling source file(s)...
Besselverfahren.cpp
Besselverfahren.cpp: In function `int main()':
Besselverfahren.cpp:55: error: `c' undeclared (first use this function)
Besselverfahren.cpp:55: error: (Each undeclared identifier is reported only
once for each function it appears in.)

Besselverfahren.exe - 2 error(s), 0 warning(s)
 
Sorry für Doppelpost aber das ist sehr dringend weil ich das Physiqueprotokoll für das ich das gemacht hab Morgen abgeben muss

thx
 
moin


Die weil Schleife muss c kennen bevor sie gestartet wird:
Code:
#include <iostream>

using namespace std;


int main()
{
	int c = 0;

	do
	{
		cout<<"Brennweitenberechnung nach Bessel"<<endl;
		cout<<"Gib die Werte ein (statt Komma bitte Punkt!)"<<endl;
		cout<<"bestaetige mit 'Enter'"<<endl;
		cout<<"g1:"<<endl;
		double g;
		cin>>g;
		cout<<"b1:"<<endl;
		double b;
		cin>>b;
		double x=b;
		cout<<"g2:"<<x<<endl;
		cout<<"..."<<endl;
		double e=g+b;
		cout<<"e: "<<e<<endl;
		double h=x-g;
		double const U=0;
		if(h<U)
		{
			double z=h*(-1);
			cout<<"d: "<<z<<endl;
			cout<<"..."<<endl;
			double l=((e*e)-(z*z))/(4*e);
			cout<<"Brennweite:"<<l<<endl;
			cout<<"..."<<endl;
			cout<<"Eigentliche Brennweite:"<<endl;
			int q;
			cin>>q;
			double r=q-l;
			cout<<"Abweichung: "<<r<<endl;
		}
		else
		{
			cout<<"d: "<<h<<endl;
			cout<<"..."<<endl;
			double f=((e*e)-(h*h))/(4*e);
			cout<<"Brennweite:"<<f<<endl;
			cout<<"..."<<endl;
			cout<<"Eigentliche Brennweite:"<<endl;
			int p;
			cin>>p;
			double j=p-f;
			cout<<"Abweichung: "<<j<<endl;
		}
		cout<<"Druecke 1 um das Programm zu beenden"<<endl;

		cin>>c;
	}
	while ( c != 1);

	return 0;
}


mfg
umbrasaxum
 
Zurück