none
Schleifen-Problem RRS feed

  • 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!

    Donnerstag, 20. Mai 2010 21:12

Antworten

  • Versuche Dir doch einfach vorzustellen, wie der Algorithmus laufen muss.
    1. Startdaten angeben (aktuelle Position etc.)
    2. Solange Aktuelle Position den Zielwert nicht erreicht. führe die folgenden Schritte aus
    3. Neue Koordinaten errechnen.
    4. Neue Koordinaten nach aktuelle Position kopieren und weiter bei 2


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 21. Mai 2010 08:35
    Moderator
  • 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++)
    Freitag, 21. Mai 2010 11:31

Alle Antworten

  • Versuche Dir doch einfach vorzustellen, wie der Algorithmus laufen muss.
    1. Startdaten angeben (aktuelle Position etc.)
    2. Solange Aktuelle Position den Zielwert nicht erreicht. führe die folgenden Schritte aus
    3. Neue Koordinaten errechnen.
    4. Neue Koordinaten nach aktuelle Position kopieren und weiter bei 2


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 21. Mai 2010 08:35
    Moderator
  • 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
    Freitag, 21. Mai 2010 10:43
  • 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++)
    Freitag, 21. Mai 2010 11:31
  • 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?

    Freitag, 21. Mai 2010 14:29
  • Verwende den Debugger und versuche selbst eine Lösung zu finden...
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 25. Mai 2010 20:03
    Moderator