Benutzer mit den meisten Antworten
Schleifen-Problem

Frage
-
Hi ich bin ein Anfänger in sachen c++, habe folgendes Problem:
ich will ein Programm erstellen, dass mir die Bahn eines um die erde kreisenden Körpers berechnet.
jetzt bekomm ich aber die Schleife nicht hin:
//neuer Radius
double radius1;
radius1 =sqrt(x*x+y*y);
cout << "Neuer Radius betraegt" << " " << radius1 << endl;
// neue Beschleunigung y-Richtung; x-Richtung
double ax1;
ax1 = (-ymstart*(x/(radius1*radius1*radius1)));
cout << "Neue Beschleunigung in x-Richtung:" << " " << ax1 << endl;
double ay1;
ay1 = (-ymstart*(y/(radius1*radius1*radius1)));
cout << "Neue Beschleunigung in y-Richtung:" << " " << ay1 << endl;
//Neue Geschwindigkeit x-Richtung; y-Richtung
double vx1;
vx1 = (vx+ax1*(tintervall));
cout << "Neue Geschwindigkeit in x-Richtung:" << " " << vx1 << endl;
double vy1;
vy1 = (vy+ay1*(tintervall));
cout << "Neue Geschwindigkeit in y-Richtung:" << " " << vy1 << endl;
// Neue x und y Position nach 2. Iterationsschritt
double x1;
x1 = (x+vx1*tintervall);
cout << "Neue x-Position nach 2. Iterationsschritt:" << " " << x1 << endl;
double y1;
y1 = (y+vy1*tintervall);
cout << "Neue y-Position nach 2. Iterationsschritt:" << " " << y1 << endl;
wie schaffe ich es, dass ich die neu berechneten x und y positionen wieder oben in die Radiusberechnung einsetzten kann und somit die neue Position berechnen kann, es also eine Schleife entsteht. Die Schleife soll solange laufen, bis die Bahn berechnet ist also bis der Startwert wieder erreicht ist
Danke schonmal im vorraus!
Antworten
-
Versuche Dir doch einfach vorzustellen, wie der Algorithmus laufen muss.
- Startdaten angeben (aktuelle Position etc.)
- Solange Aktuelle Position den Zielwert nicht erreicht. führe die folgenden Schritte aus
- Neue Koordinaten errechnen.
- Neue Koordinaten nach aktuelle Position kopieren und weiter bei 2
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. Mai 2010 13:26
-
Hallo benmahmood!
> Wie setzte ich den 4. schritt konkret in c++ Sprache um das ist ja mein
> hauptproblem. die neuen errechneten positionen in die anfangsgleichung
> wieder reinzukopieren
typedef struct tPosition { int x; int y; } tPosition; void MainThread() { tPosition actPos, zielPos; // 1. Startdaten angeben (aktuelle Position etc.) // ... // printf(actPos); // 2. Solange Aktuelle Position den Zielwert nicht erreicht. führe die folgenden Schritte aus while(actPos != zielPos) { // 3. Neue Koordinaten errechnen. // .. tPosition neuePos; // neuePos = ... // 4. Neue Koordinaten nach aktuelle Position kopieren und weiter bei 2 actPos == neuePos; } }
Greetings
Jochen
Jochen Kalmbach (MVP VC++)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. Mai 2010 13:26
Alle Antworten
-
Versuche Dir doch einfach vorzustellen, wie der Algorithmus laufen muss.
- Startdaten angeben (aktuelle Position etc.)
- Solange Aktuelle Position den Zielwert nicht erreicht. führe die folgenden Schritte aus
- Neue Koordinaten errechnen.
- Neue Koordinaten nach aktuelle Position kopieren und weiter bei 2
Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. Mai 2010 13:26
-
Hallo benmahmood!
> Wie setzte ich den 4. schritt konkret in c++ Sprache um das ist ja mein
> hauptproblem. die neuen errechneten positionen in die anfangsgleichung
> wieder reinzukopieren
typedef struct tPosition { int x; int y; } tPosition; void MainThread() { tPosition actPos, zielPos; // 1. Startdaten angeben (aktuelle Position etc.) // ... // printf(actPos); // 2. Solange Aktuelle Position den Zielwert nicht erreicht. führe die folgenden Schritte aus while(actPos != zielPos) { // 3. Neue Koordinaten errechnen. // .. tPosition neuePos; // neuePos = ... // 4. Neue Koordinaten nach aktuelle Position kopieren und weiter bei 2 actPos == neuePos; } }
Greetings
Jochen
Jochen Kalmbach (MVP VC++)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 27. Mai 2010 13:26
-
habe jetzt folgendes programm:
// Satellitenberechnung.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Startwerte definieren
signed long double xstart;
signed long double ystart;
double vxstart;
double vystart;
double ymstart;
double tintervall;
cout << "Bitte Startwerte eingeben!" << endl;
cout << "x(0) eingeben:";
cin >> xstart;
cout << "y(0) eingeben:";
cin >> ystart;
cout << "Vx(0) eingeben:";
cin >> vxstart;
cout << "Vy(0) eingeben:";
cin >> vystart;
cout << "yM eingeben:";
cin >> ymstart;
cout << "Iterationsintervall eingeben:";
cin >> tintervall;
//Startwerte definiert
// 1. Iterationsschritt beginnen
// Radius berechnen
double radius;
radius =sqrt(xstart*xstart + ystart*ystart);
cout << "Radius betraegt" << " " << radius << endl;
getchar();
// Beschleunigung y-Richtung; x-Richtung
double ax;
ax = (-ymstart*(xstart/(radius*radius*radius)));
cout << "Beschleunigung in x-Richtung:" << " " << ax << endl;
double ay;
ay = (-ymstart*(ystart/(radius*radius*radius)));
cout << "Beschleunigung in y-Richtung:" << " " << ay << endl;
// Geschwindigkeit x-Richtung; y-Richtung
double vx;
vx = (vxstart+ax*(tintervall/2));
cout << "Geschwindigkeit in x-Richtung:" << " " << vx << endl;
double vy;
vy = (vystart+ay*(tintervall/2));
cout << "Geschwindigkeit in y-Richtung:" << " " << vy << endl;
// x und y Position nach 1. Iterationsschritt
double x;
x = (xstart+vx*tintervall);
cout << "x-Position nach 1. Iterationsschritt:" << " " << x << endl;
double y;
y = (ystart+vy*tintervall);
cout << "y-Position nach 1. Iterationsschritt:" << " " << y << endl;
// 2. Iterationsschritt
int i;
for (i=0; i<30; i++)
{
//neuer Radius
double radius1;
radius1 =sqrt(x*x+y*y);
cout << "Neuer Radius betraegt" << " " << radius1 << endl;
// neue Beschleunigung y-Richtung; x-Richtung
double ax1;
ax1 = (-ymstart*(x/(radius1*radius1*radius1)));
cout << "Neue Beschleunigung in x-Richtung:" << " " << ax1 << endl;
double ay1;
ay1 = (-ymstart*(y/(radius1*radius1*radius1)));
cout << "Neue Beschleunigung in y-Richtung:" << " " << ay1 << endl;
//Neue Geschwindigkeit x-Richtung; y-Richtung
double vx1;
vx1 = (vx+ax1*(tintervall));
cout << "Neue Geschwindigkeit in x-Richtung:" << " " << vx1 << endl;
double vy1;
vy1 = (vy+ay1*(tintervall));
cout << "Neue Geschwindigkeit in y-Richtung:" << " " << vy1 << endl;
// Neue x und y Position nach 1. Iterationsschritt
double x1;
x1 = (x+vx1*tintervall);
cout << "Neue x-Position nach 2. Iterationsschritt:" << " " << x1 << endl;
double y1;
y1 = (y+vy1*tintervall);
cout << "Neue y-Position nach 2. Iterationsschritt:" << " " << y1 << endl;
// Neue Koordinaten zuweisen
x=y1;
y=y1;
}
getchar();
return 0;
}
dieses gibt mir aber falsche werte aus, die ich zuvor zur überprüfung im Taschenrechner ausgerechnet habe.
was mache ich falsch?