variable ändert sich ohne erkennbaren Grund...
-
Hallo zusammen,
ich habe mit Borland6 ein Programm geschrieben, das Zeiger für 3 punkte an eine Funktion übergibt, die die Steigung der 3 Verbindungsgeraden ausrechnet. Dies klappt eigentlich auch ganz gut, bis auf eine seltsame sache. Vor dem Berechnen der Stegungen werden die Punkte noch richtig ausgegeben. Nach dem Berechnen der Steigung überprüfe ich ob die 3 Punkte evtl. auf einer Geraden liegen. Hier sagt mein Programm oft, obwohl die Punkte 100% nicht auf einer Geraden liegen, dass die Aussage zutrifft und gibt mir danach für punkt[1] und für punkt[0] den gleichen Wert aus. Für Steigung 3 wird "NAN" ausgegeben (kA was das bedeutet), allerdings müsste das Programm abstürzen wenn da bereits durch 0 geteilt würde.
hier ist mein Quelltext:Form1->Edit5->Text = punkt[2]; //gibt 1 aus Form1->Edit6->Text = punkt[1]; //gibt 3 aus Form1->Edit7->Text = punkt[0]; //gibt 2 aus float m1 = (y[punkt[0]]-y[punkt[2]])/(x[punkt[0]]-x[punkt[2]]); float m2 = (y[punkt[2]]-y[punkt[1]])/(x[punkt[2]]-x[punkt[1]]); float m3 = (y[punkt[0]]-y[punkt[1]])/(x[punkt[0]]-x[punkt[1]]); if(m1 == m2) { Form1->Edit12->Text = punkt[2]; //gibt 3 aus Form1->Edit13->Text = punkt[1]; //gibt 2 aus Form1->Edit14->Text = punkt[0]; //gibt 2 aus Form1->Edit15->Text = m1; //gibt 0.49... aus Form2->Edit16->Text = m2; //gibt 0.49... aus (punkt[1] vor Berechnung verändert!) Form3->Edit17->Text = m3; // gibt "NAN" aus return(false); }Ich hoffe ihr könnt mir helfen!!!
Gruß Jakob
-
Die Division durch 0 gibt bei floats keinen Fehler, sondern eben Nan, was den Fehler anzeigen soll.
-
ok danke. das war aber leider das klenere Problem...

-
Dann geh da mal mit dem Debugger durch die Berechnung und schau, wo etwas schief läuft..
-
Ist dein punkt-Array groß genug? Solche Effekte können auch leicht durch Bereichsüberschreitungen entstehen.
-
empty1990 schrieb:
Für Steigung 3 wird "NAN" ausgegeben (kA was das bedeutet)
Das bedeutet Not A Number
Erklärung siehe Vorposter.
rya.