Gleichung lösen

Diskutiere Gleichung lösen im Developer Network Forum im Bereich Hardware & Software Forum; Hi, wieso läuft das nicht? Er zeigt keine errors an. Also mein ziel ist es das er 2 Zahle von -3 bis +3 in den for schleifen erzeugen soll...
  • Gleichung lösen Beitrag #1
Matyr

Matyr

Bekanntes Mitglied
Dabei seit
09.03.2007
Beiträge
428
Reaktionspunkte
0
Hi, wieso läuft das nicht? Er zeigt keine errors an.

Also mein ziel ist es das er 2 Zahle von -3 bis +3 in den for schleifen erzeugen soll. Anschließend soll er einmal x²+y²=2 und einmal
x hoch 4 + y hoch 4 = 4 Testen. Wenn das klappt soll er mir die Zahlen ausgeben.
x ist die erste Zahl und
y die Zweite. Und er soll alle 36 000 000 möglichkeiten durchprobieren.
Da er ja immer nur +0,001 rechnen soll



Vielen Dank


#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;

bool check2 (double,double);
bool check4 (double,double);
void schreib (double,double);


int main()
{
double x= (-3,000);
double y= (-3,000);

for(;x>3;x+0,01)
{
for(;y>3;y+0,01)
{
if(check2(x,y) && check4(x,y))
{
cout<<"X= "<<x<<"Y= "<<y<<"\n\n";
schreib(x,y);
}
}
}

}



bool check2(double x, double y)
{
double hx,hy;
hx=pow(x,2);
hy=pow(x,2);

if((hx+hy)==2){return true;}

return false;
}

bool check4 (double x,double y)
{
double hx,hy;
hx=pow(x,4);
hy=pow(y,4);

if((hx+hy)==4){return true;}
return false;
}

void schreib (double x,double y)
{
ofstream f;
f.open("Speicher.txt", ios::app);
f<<"X= "<<x<<" Y= "<<y<<"\n\n";
f.close();
}
 
  • Gleichung lösen Beitrag #2
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Die ersten Sachen, die mir ins Auge springen: Kommazahlen schreibt man mit Punkt, nicht mit Beistrich.
Deine for-Schleifen werden nicht betreten, weil die Schleifenbedingung nicht erfüllt ist. x<=3.0 wäre angebrachter. Die Zahlen werden nicht inkrementiert, da gehört +=0.01.
Weiters werden Zahlen nicht genauer, wenn man mehr Nullen dranhängt ;) , und den Startwert für die for-Schleifen sollte man wegen der Übersichtlichkeit in der Schleife angeben, nicht davor in einer Initialisierung.
 
  • Gleichung lösen Beitrag #3
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
entweder du meinst soetwas:
Code:
for(double x,y ; x<=3 && y<=3 ; x+0.001 && y+0.001)
{
if (x*x+y*y==2)
{
cout<<"für x*x+y*y=2 gillt:"<<endl;
cout<<"X ist gleich:"<<x<<" und y ist gleich:"<<y<<endl;
}
if (x*x*x*x+y*y*y*y==4)
{
cout<<"für x*x+y*y=4 gillt:"<<endl;
cout<<"x ist gleich:"<<x<<" und y ist gleich:"<<y<<endl;
}
}

oder du meinst:
Code:
double x,y;
for (x = -3 ; x<=3 ; x+0.001)
{
for (y = -3 ; y<=3 ; y+0.001)
{
if (x*x+y*y==2)
{
cout<<"für x*x+y*y=2 gillt:"<<endl;
cout<<"X ist gleich:"<<x<<" und y ist gleich:"<<y<<endl;
}
if (x*x*x*x+y*y*y*y==4)
{
cout<<"für x*x*x*x+y*y*y*y=4 gillt:"<<endl;
cout<<"X ist gleich:"<<x<<" und y ist gleich:"<<y<<endl;
}
}
}


o_O oder irre ich mich jetzt ganz? ^^
 
  • Gleichung lösen Beitrag #4
Matyr

Matyr

Bekanntes Mitglied
Dabei seit
09.03.2007
Beiträge
428
Reaktionspunkte
0
@Truman

Ich weiß nicht was du meinst dein aufbau ist mir nen bisschen komplieziert

@cmddegi

Danke, Normallerweis mache ich nicht solche fehler.:be:

Mfg. Matyr


Ich habe jetzt das hier aber irendwie gibt es keine lösung oder das prog hat immer noch mucken
Der ändert y nicht

#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;

bool check2 (double,double);
bool check4 (double,double);
void schreib (double,double);


int main()
{
double x= -3.000;
double y= -3.000;

for(-3;x<=3;x=x+0.001)
{
cout<<"Schleife 1 X= "<<x<<" Y= "<<y<<"\n";

for(-3;y<=3;y=y+0.001)
{
cout<<"Schleife 2 X= "<<x<<" Y= "<<y<<"\n";

if(check2(x,y) && check4(x,y))
{
cout<<"X= "<<x<<" Y= "<<y<<"\n\n";
schreib(x,y);
break;
}
}
}

}



bool check2(double x, double y)
{
double hx,hy;
hx=pow(x,2);
hy=pow(x,2);

if((hx+hy)==2){return true;}

return false;
}

bool check4 (double x,double y)
{
double hx,hy;
hx=pow(x,4);
hy=pow(y,4);

if((hx+hy)==4){return true;}
return false;
}

void schreib (double x,double y)
{
ofstream f;
f.open("Speicher.txt", ios::app);
f<<"X= "<<x<<" Y= "<<y<<"\n\n";
f.close();
}
 
Zuletzt bearbeitet:
  • Gleichung lösen Beitrag #5
fox99

fox99

Bekanntes Mitglied
Dabei seit
27.11.1999
Beiträge
3.948
Reaktionspunkte
27
Ort
Omicron Persei 8
Code:
if((hx+hy)==4){return true;}
wie hoch ist die warscheinlichkeit einzuschätzen, das hx und hy gleich sind und nicht nach der x-ten nachkommastelle verschieden?

wie wäre es mit sowas?
Code:
e=0.00001;
...
if (abs((hx+hy)-4)<e) { ...
 
  • Gleichung lösen Beitrag #6
fox99

fox99

Bekanntes Mitglied
Dabei seit
27.11.1999
Beiträge
3.948
Reaktionspunkte
27
Ort
Omicron Persei 8
Ich habe jetzt das hier aber irendwie gibt es keine lösung oder das prog hat immer noch mucken
Der ändert y nicht

gehts damit?
Code:
for(x=-3.0;x<=3.0;x+=0.001){
  for(y=-3.0;y<=3.0;y+=0.001){
...
 
  • Gleichung lösen Beitrag #7
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Der Startwert in den for-Schleifen muss z.B. x=-3.0 sein. Das geht zwar in deinem Fall wegen der vorherigen Initialisierung, aber die Anweisung ist so nutzlos. Und im check2 hast du dich vertippt, da berechnet er für hy die Potenz von x.
 
  • Gleichung lösen Beitrag #8
Matyr

Matyr

Bekanntes Mitglied
Dabei seit
09.03.2007
Beiträge
428
Reaktionspunkte
0
Habe jetzt mal so geändert :

Unter den speicer verweis habe ich auf true gesetzt damit er alles abspeichert zum gucken was er macht:
Aber er ändert y immer noch nicht.

@fox99 Was meinst du damit?
Code:
if((hx+hy)==4){return true;}wie hoch ist die warscheinlichkeit einzuschätzen, das hx und hy gleich sind und nicht nach der x-ten nachkommastelle verschieden?

wie wäre es mit sowas?

Code:
e=0.00001;
...
if (abs((hx+hy)-4)<e) { ...





#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;

bool check2 (double,double);
bool check4 (double,double);
void schreib (double,double);


int main()
{
double x;
double y;

for(x=-3;x<=3;x+=0.001)
{
cout<<"Schleife 1 X= "<<x<<" Y= "<<y<<"\n";

for(y=-3;y<=3;y+=0.001)
{
cout<<"Schleife 2 X= "<<x<<" Y= "<<y<<"\n";

if(1)//check2(x,y) && check4(x,y))
{
cout<<"X= "<<x<<" Y= "<<y<<"\n\n";
schreib(x,y);
break;
}
}
}

}



bool check2(double x, double y)
{
double hx,hy;
hx=pow(x,2);
hy=pow(y,2);

if((hx+hy)==2){return true;}

return false;
}

bool check4 (double x,double y)
{
double hx,hy;
hx=pow(x,4);
hy=pow(y,4);

if((hx+hy)==4){return true;}
return false;
}

void schreib (double x,double y)
{
ofstream f;
f.open("Speicher.txt", ios::app);
f<<"X= "<<x<<" Y= "<<y<<"\n\n";
f.close();
}
 
  • Gleichung lösen Beitrag #9
fox99

fox99

Bekanntes Mitglied
Dabei seit
27.11.1999
Beiträge
3.948
Reaktionspunkte
27
Ort
Omicron Persei 8
das break; bricht die y-schleife ab.
@fox99 Was meinst du damit?
Code:
if((hx+hy)==4){return true;}wie hoch ist die warscheinlichkeit einzuschätzen, das hx und hy gleich sind und nicht nach der x-ten nachkommastelle verschieden?

wie wäre es mit sowas?

Code:
e=0.00001;
...
if (abs((hx+hy)-4)<e) { ...

du hast es mit kommazahlen zu tun, die ab und zu die blöde eigenschaft haben, unendlich viele nachkommastellen zu haben. es muss also gerundet werden, um die zahlen zu speichern. dabei entstehen fehler, die mit jeder rechnung grösser werden. der ==-vergleich wird vermutlich nie zutreffen. e definiert eine genauigkeit. wenn das ergebnis von abs((hx+hy)-4) kleiner als e ist, wird (hx+hy)==4 wohl so ungefähr zutreffen.
 
  • Gleichung lösen Beitrag #10
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
also ich frage mich was du an dem aufbau meines codes kompliziert findest...
zu code 1:
der code erhöht x und y gleichzeitig und überprüft bei jedem durchlauf ob x^2+y^2=2 bzw. ob x^4+y^4=4 ist.
zu code 2:
der code macht nichts anderes nur das er, wie dein code vorher auch, die werte nacheinander erhöht ...

wobei code1 fehler enthält seh ich grade ...
Code:
double x,y;
for(x=-3 && y=-3 ; x<=3 && y<=3 ; x+0.001 && y+0.001)
{
if (x*x+y*y==2)
{
cout<<"für x*x+y*y=2 gillt:"<<endl;
cout<<"X ist gleich:"<<x<<" und y ist gleich:"<<y<<endl;
}
if (x*x*x*x+y*y*y*y==4)
{
cout<<"für x^4+y^4=4 gillt:"<<endl;
cout<<"x ist gleich:"<<x<<" und y ist gleich:"<<y<<endl;
}
}
 
  • Gleichung lösen Beitrag #11
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Code1 würde reichlich wenig Sinn machen, wenn x und y gleichzeitig erhöht werden; dann bräuchte man ja keine zwei Variablen. Außerdem werden x und y nicht erhöht; wegen des Fehlers, den du ja schon bemerkt hast (nicht, dass jemand das ausprobiert und sich fragt, warum es nicht geht).
 
  • Gleichung lösen Beitrag #12
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
ja stimmt schon ^^ sry

aber der zweite müsste ja das bringen was er will oder nicht?
 
  • Gleichung lösen Beitrag #13
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Jo, ich denk schon. Der Fehler mit dem Schleifeninkrement ist da aber ebenfalls drin, und die Problematik mit den Double-Zahlen ebenfalls, die fox99 angesprochen hat.
 
  • Gleichung lösen Beitrag #14
Matyr

Matyr

Bekanntes Mitglied
Dabei seit
09.03.2007
Beiträge
428
Reaktionspunkte
0
was ist denn das problem?

Wieso sollte der compiler oder wer auch immer runden?
Ist doch extra ne komma zahl
 
  • Gleichung lösen Beitrag #15
U

UnimatrixZero

Bekanntes Mitglied
Dabei seit
27.06.2001
Beiträge
645
Reaktionspunkte
0
was ist denn das problem?

Wieso sollte der compiler oder wer auch immer runden?
Ist doch extra ne komma zahl
Wenn der Computer unendlich genau rechnen könnte, dann müßte er auch nicht runden. Allerdings dauern dann die Rechenoperationen ebenso lange ;-)
Nimm als Beispiel die einfache Division 1:3. Was soll der Computer - ohne zu runden - als Ergebnis anzeigen?

Ganze Zahlen sind noch recht einfach zu beherrschen. Bei Kommazahlen liegt die Sache um einiges komplizierter. Schau mal in die Wikipedia. Dort findest Du auch Infos darüber, wie eine solche Zahl im Computer abgespeichert wird warum es zu Rundungsfehlern kommt.
http://de.wikipedia.org/wiki/Gleitkommazahl
 
Thema:

Gleichung lösen

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben