Probleme mit den for-Schleifen bei Berechnungen von Schnittpunkten von Geraden.
-
Hallo,
habe probleme mit diesem halb fertigen Programm, das Scbnittpunkte von zwei Geraden ausrechnen sollte.
Habe festgestellt, dass das Programm die Vektoren richtig zuordent, wenn der Berechnungsblock fehlt, also der Block wo ich f und z ausrechne. Jedoch wenn ich diesen im Programm lasse so wie unten, dann ordnet er ein paar Vektoren falsch zu.Kann das sein, dass sich die for-Schleifen die ineinander laufen sich beißen?
Wäre klasse, wenn mir jemand helfen kann.#include <iostream.h> #include <conio.h> void main() { int i,c,a; float Auf[3],Richt[3],f,z,g1,g2,g3; char ende; const char esc=27; while(esc!=ende) { cout << "Das Programm berechnet den Schnittpunkt von zwei Geraden.\n"; for(c=0;c<10;c=c+5) { cout <<"\nGeben Sie die "<<(c+1)<<".Gerade in Parameterform ein.\n"; cout <<"\n"; for(i=0;i<3;i++) {cout <<"Geben Sie den Aufpunkt "<<(c+1)<<"."<<(i+1)<<" ein: "; cin >> Auf[i+c];} cout <<"\n"; for(a=40;a<43;a++) {cout <<"Geben Sie den Richtungsvektor "<<(c+1)<<"."<<(a+1)<<" ein: "; cin >> Richt[a+c];} } f=(-Richt[47])-Richt[42]/Richt[41]*(-Richt[46]); z=((Auf[7]-Auf[2])-(Richt[42]/Richt[41]*(Auf[6]-Auf[1])))/f; cout<<""<<f<<", "; cout<<""<<z<<", "; g1=z*Richt[45]+Auf[5]; g2=z*Richt[46]+Auf[6]; g3=z*Richt[47]+Auf[7]; cout<<"Schnittpunkt("<<g1<<"/"<<g2<<"/"<<g3<<")"; cout<<""<<Auf[0]<<","<<Auf[1]<<","<<Auf[2]<<","<<Richt[40]<<","<<Richt[41]<<","<<Richt[42]<<","<<Auf[5]<<","<<Auf[6]<<","<<Auf[7]<<","<<Richt[45]<<","<<Richt[46]<<","<<Richt[47]<<""; cout << "\n\n\n\nAbbruch: <esc> Wiederhohlen: <beliebige Taste>"; ende=getch(); clrscr(); } }
Gruß Benny
-
ehrlich gesagt bin ich etwas erstaunt, dass das programm funktioniert. mal ein paar sachen die mir auffallen:
for(c=0;c<10;c=c+5) ... for(a=40;a<43;a++)
machst du immer so komische for-schleifen? ich würde (in anbetracht derarrays) immer von 0 bis 3 gehen!
float Auf[3]; // i zwischen 0 und 2, c zwischen 0 und 5 cin >> Auf[i+c];
wenn das mal keine bereichsüberschreitung gibt! du hast nur Auf[0], Auf[1], Auf[2]!
f=(-Richt[47])-Richt[42]/Richt[41]*(-Richt[46]); z=((Auf[7]-Auf[2])-(Richt[42]/Richt[41]*(Auf[6]-Auf[1])))/f; cout<<""<<f<<", "; cout<<""<<z<<", "; g1=z*Richt[45]+Auf[5]; g2=z*Richt[46]+Auf[6]; g3=z*Richt[47]+Auf[7]; cout<<"Schnittpunkt("<<g1<<"/"<<g2<<"/"<<g3<<")";
jetz aber fett viele bereichsüberschreitungen! die indizes gehen doch nur von 0 bis 3!
nachdem du diese sachen ausgebessert hast: gehts jetzt eher? :xmas2:
-
Danke Korbinian,
habs hin bekommen.Nun jetzt habe ich ein weiteres Problem ich weis nicht wie ich mein Programm schreiben soll, daß es Geraden ausrechnet die ineinander liegen oder Parallel oder windschief sind ?????????
Normale Geraden die einen Schnittpunkt haben die kann mein Programm jetzt ausrechnen.void main() { int i,c,a; float f,z,g1,g2,g3,Auf[3],Richt[3],auf[3],richt[3]; char ende; const char esc=27; while(esc!=ende) { cout << "Das Programm berechnet den Schnittpunkt von zwei Geraden.\n"; cout <<"\nGeben Sie die erste Gerade in Parameterform ein.\n\n"; cout <<"\n"; for(i=0;i<3;i++) {cout <<"Geben Sie den Aufpunkt 1."<<(i+1)<<" ein: "; cin >> Auf[i];} cout <<"\n"; for(a=0;a<3;a++) {cout <<"Geben Sie den Richtungsvektor 1."<<(a+1)<<" ein: "; cin >> Richt[a];} cout <<"\nGeben Sie die zweite Gerade in Parameterform ein.\n\n"; cout <<"\n"; for(i=0;i<3;i++) {cout <<"Geben Sie den Aufpunkt 2."<<(i+1)<<" ein: "; cin >> auf[i];} cout <<"\n"; for(a=0;a<3;a++) {cout <<"Geben Sie den Richtungsvektor 2."<<(a+1)<<" ein: "; cin >> richt[a];} f=(-richt[2])-Richt[2]/Richt[1]*(-richt[1]); if(f!=0) {z=((auf[2]-Auf[2])-(Richt[2]/Richt[1]*(auf[1]-Auf[1])))/f; g1=z*richt[0]+auf[0]; g2=z*richt[1]+auf[1]; g3=z*richt[2]+auf[2]; cout<<"Schnittpunkt("<<g1<<"/"<<g2<<"/"<<g3<<")";} else {cout<<"Die Geraden sind windschief oder Parallel oder sind genau gleich.";} cout << "\n\n\n\nAbbruch: <esc> Wiederhohlen: <beliebige Taste>"; ende=getch(); clrscr(); } }
-
nu ja, du musst dir halt im klaren sein, wie die rechnung aussieht. genau so wie dus am papier machen würdest, so machst es im programm. wenn es an der mathematik hapert, dann frag speziell danach im matheforum (aber es wird vielleicht schon in der mathe faq stehen)