<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Warum geht es unter linux und nicht unter windows??]]></title><description><![CDATA[<p>Hi, bin gerade am verzweifeln, da ich eine Hausarbeit anfertigen muss und es zuhause leider nie funktioniert zu kompelieren... ien einfaches Programm wei hello world funktionert tadelos, aber folgender code leider nicht. Unter linux in der Uni klappt es imemer ohne Probleme, könnte jemand einmal ausprobieren oder mir evtl sogar sagen warum es nicht klappt ?? es kommt imemr die standard windows fehlermeldung &quot;Programm funktioniert nicht mehr&quot;</p>
<p>Ist leider etwas lang, soll einen Springenden Ball simulieren, die mit einem Federpotential aneinander gekoppelt sind :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cmath&gt;
#include&lt;fstream&gt;
#include&lt;math.h&gt;

using namespace std;
void initialize();                                                  //Anfangswerte für x,v,m,time
void force();                                                       //Berechnen der Kraefte/Energie als Funktion der x,v, etc
void integrate_euler(double dt);                                    //Integrieren der Bewegungsgleichung mit Euler-Verfahren
void integrate_velocity1(double dt);                                //Integrieren der Bewegungsgleichung mit Velocity-Verfahren
void integrate_velocity2(double dt);                                //Integrieren der Bewegungsgleichung mit Velocity-Verfahren
void sample(double DT, ofstream&amp; ausgabe1, ofstream&amp; ausgabe2);     //Berechnung verschiedener Observablen und Ausschreiben

double laenge (double w1, double w2, double w3) // Länge im 3-dimensionalen Raum berechnen.
{
    double strecke;
    strecke = sqrt(pow(w1,2)+pow(w2,2)+pow(w3,2));
    return strecke;
}

//-------------------------------------------------------- Variablen einführen-----------------------------------------------
const int np = 2;                     // Anzahl Bälle
double G,k;
double zeit;
int spruenge, koll;
double t_sprung;
double x[np][3];                //Koordinaten (3 Raumdimensionen)
double v[np][3];                //Geschwindigkeit insgesamt
double cache[np][3];            //Zwischenspeicher
double m[np];                   //Massen
double f[np][3];                //Kraefte auf Teilchen (3 Raumdimensionen)
double f2[np][3];               //Kraefte auf Teilchen (3 Raumdimensionen) durch Feder
double ke1,pe1,ke2,pe2;         //kinetische und potentielle Energien
double t;                       //Zeit
double Ballradius;               //Radius der Bälle

//-------------------------------------------------Main----------------------------------------------------------------------
int main(int argc , char* argv[])
{

    //Einlesen der Integrations-Parameter
    const int NMAX =atoi(argv[1]); //Anzahl an Iterationen
    const double DT=atof(argv[2]); //Zeitschritt

    //Energien der Algorithmen
    double energy_e[np][NMAX], energy_v[np][NMAX];

    //Anfangswerte für x,v,m,zeit,G,K,spruenge,t_sprung,t
    initialize();

    //Integriere nmax mal und schreibe Ergebnisse aus
    force();
    ofstream out1; out1.open(&quot;Trajektorie1_e.txt&quot;,ios::out);  //Trajektorie unteres Teilchen
    ofstream out2; out2.open(&quot;Trajektorie2_e.txt&quot;,ios::out);  //Trajektorie oberes Teilchen
    ofstream phase; phase.open(&quot;Phasenraum_e.txt&quot;,ios::out);  //Pahsenraum
    ofstream details; details.open(&quot;zDetails.txt&quot;, ios::out); //Details

    //Euler
    for(int i=1;i&lt;=NMAX;i++)
    {
        force();
        integrate_euler(DT);
        t+=DT;
        //Energie-Euler
        out1 &lt;&lt; ke1 + pe1 &lt;&lt; &quot; &quot;;
        out2 &lt;&lt; ke2 + pe2 &lt;&lt; &quot; &quot;;
        energy_e[0][i] = ke1+ke2+pe1+pe2;
        sample(DT, out1, out2);
        phase &lt;&lt; x[1][2]-x[0][2]&lt;&lt; &quot; &quot;&lt;&lt; x[0][2]+x[1][2]&lt;&lt;endl;

    }
    cout &lt;&lt;&quot;Anzahl der Sprünge : &quot;&lt;&lt;spruenge&lt;&lt;&quot;\nGesamtzeit :&quot;&lt;&lt;t&lt;&lt;endl;
    details &lt;&lt; &quot;Gesamtzeit : \t\t\t\t\t&quot; &lt;&lt; t&lt;&lt;&quot;s\nZeitschritt von :\t\t\t\t&quot;&lt;&lt; DT&lt;&lt;&quot;s\nFederkonstante : \t\t\t\t&quot;&lt;&lt;k&lt;&lt; &quot;\n\nEuler\nAnzahl Bodenkontakte : \t\t\t\t&quot;&lt;&lt; spruenge &lt;&lt; &quot;\nKollisionen der Bälle : \t\t\t&quot;&lt;&lt; koll&lt;&lt;endl;

    out1.close();
    out2.close();
    phase.close();
    //Velocity-Verlet Verfahren
    cout &lt;&lt; &quot;\n_______________________________________________________________\nVelocity-Verlet Verfahren\n_______________________________________________________________&quot;&lt;&lt;endl;
    initialize();
    ofstream out21; out21.open(&quot;Trajektorie1_v.txt&quot;,ios::out);  //Trajektorie unteres Teilchen
    ofstream out22; out22.open(&quot;Trajektorie2_v.txt&quot;,ios::out);  //Trajektorie oberes Teilchen
    ofstream phase2; phase2.open(&quot;Phasenraum_v.txt&quot;,ios::out);  //Pahsenraum

    for(int i=1;i&lt;=NMAX;i++)
    {
        force();
        integrate_velocity1(DT);
        force();
        integrate_velocity2(DT);
        t+=DT;
        //Energie-Velocity-Verlet
        out21 &lt;&lt; ke1 + pe1 &lt;&lt; &quot; &quot; ;
        out22 &lt;&lt; ke2 + pe2 &lt;&lt; &quot; &quot;;
        energy_v[0][i] = ke1+ke2+pe1+pe2;
        sample(DT, out21, out22);
        phase2 &lt;&lt; x[1][2]-x[0][2]&lt;&lt; &quot; &quot;&lt;&lt; x[0][2]+x[1][2]&lt;&lt;endl;
    }
    details &lt;&lt; &quot;\n\nVelocity-Verlet\nAnzahl Bodenkontakte : \t\t\t\t&quot;&lt;&lt; spruenge &lt;&lt; &quot;\nKollisionen der Bälle : \t\t\t&quot;&lt;&lt; koll&lt;&lt;endl;
    cout &lt;&lt;&quot;Anzahl der Sprünge : &quot;&lt;&lt;spruenge&lt;&lt;&quot;\nGesamtzeit :&quot;&lt;&lt;t&lt;&lt; &quot; Energiedifferenz Verlet : &quot; &lt;&lt; energy_v[0][NMAX-1]&lt;&lt; &quot;-&quot;&lt;&lt;energy_v[0][1] &lt;&lt; &quot;= &quot;&lt;&lt; energy_v[0][NMAX-1]-energy_v[0][1] &lt;&lt; &quot;\nEnergiedifferenz Euler : &quot; &lt;&lt; energy_e[0][NMAX-1] &lt;&lt; &quot;-&quot; &lt;&lt;energy_e[0][1]&lt;&lt; &quot;= &quot;&lt;&lt;energy_e[0][NMAX-1] -energy_e[0][1]&lt;&lt;endl;
    details &lt;&lt; &quot;\n\nEnergiedifferenz Velocity-Verlet Verfahren : \t&quot; &lt;&lt; energy_v[0][NMAX-1]-energy_v[0][1]&lt;&lt; &quot;\nEnergiedifferenz Euler Verfahren : \t\t&quot; &lt;&lt; energy_e[0][NMAX-1] -energy_e[0][1] &lt;&lt;endl;
    out21.close();
    out22.close();
    phase2.close();
    details.close();

}
//-----------------------------------------------Initialize----------------------------------------------------------------
void initialize()
{

    //Startwerte
    Ballradius = 0.00005;
    t = 0;
    G = 1;
    k = 35;
    zeit = 0;
    spruenge = 0;
    t_sprung = 0;
    koll = 0;
    double cache[np][3];

    //erstes Teilchen
    m[0] = 1;
    x[0][0] =     0;      /* x-Richtung*/           v[0][0] = 0;
    x[0][1] =     0;      /* y-Richtung*/           v[0][1] = 0;
    x[0][2] =     10;     /* z-Richtung*/           v[0][2] = 0;

    //zweites Teilchen
    m[1] = 1;
    x[1][0] =     0;      /* x-Richtung*/           v[1][0] = 0;
    x[1][1] =     0;      /* y-Richtung*/           v[1][1] = 0;
    x[1][2] =     11;     /* z-Richtung*/           v[1][2] = 0;

}

//-------------------------------------------------Force---------------------------------------------------------------------
void force()
{
    // Schwerkraft
    for (int i =0; i&lt;np;i++)
    {
        f[i][0] = 0;
        f[i][1] = 0;
        f[i][2] = -G*m[i]-v[i][2];
    }

    // Kraft durch Feder
    f2[0][2] = -k*(x[0][2]-x[1][2]+1);
    f2[1][2] = k*(x[0][2]-x[1][2]+1);
    cout &lt;&lt; f2[0][2] &lt;&lt; &quot; &quot; &lt;&lt; f2[1][2] &lt;&lt; endl;

    //Energien
    ke1 = 0.5*m[0]*pow(laenge(v[0][0],v[0][1],v[0][2]),2);
    pe1 = m[0]*G*x[0][2];
    cout &lt;&lt;&quot; Kin : &quot;&lt;&lt; ke1 &lt;&lt; &quot;Pot: &quot;&lt;&lt; pe1 &lt;&lt; &quot; Gesamt : &quot; &lt;&lt; pe1+ke1 &lt;&lt; endl;

    ke2 = 0.5*m[1]*pow(laenge(v[1][0],v[1][1],v[1][2]),2);
    pe2 = m[1]*G*x[1][2];
    cout &lt;&lt; &quot; Kin : &quot;&lt;&lt; ke2 &lt;&lt; &quot;Pot : &quot;&lt;&lt; pe2&lt;&lt; &quot; Gesamt : &quot; &lt;&lt; pe2+ke2 &lt;&lt;endl;

}
//---------------------------------------------------Integrate--------------------------------------------------------------

void integrate_euler(double dt)  //Euler-Algorithmus
{
    zeit += dt;
    t_sprung += dt;

    //Teilche Kollision
    if ((x[1][2]-x[0][2])&lt;Ballradius)
    {
        cache[1][2]=v[1][2] ;
        v[1][2]= v[0][2];
        v[0][2]= cache[1][2];
        koll++;
    }
    for (int i =0; i&lt;np;i++)
    {
        //Bodenkontakt
        if (x[i][2] &lt;= 0)
        {
            v[i][2] = -v[i][2];
            x[i][2] = 0;
            spruenge += 1;
            t_sprung = 0;
        }

        //Integration
        for (int j=0;j&lt;3; j++)
        {
            v[i][j] = v[i][j] + dt*f[i][j];
            v[i][j] = v[i][j] + dt*f2[i][j];
            x[i][j] = x[i][j] + dt*v[i][j];
        }
    }
}
void integrate_velocity1(double dt)  //Velocity-Algorithmus1
{

    zeit += dt;
    t_sprung += dt;
    //Teilche Kollision
    if ((x[1][2]-x[0][2])&lt;Ballradius)
    {
        cache[1][2]=v[1][2] ;
        v[1][2]= v[0][2];
        v[0][2]= cache[1][2];
        koll++;
    }
    for (int i =0; i&lt;np;i++)
    {
        //Bodenkontakt
        if (x[i][2] &lt; 0)
        {
            v[i][2] = -v[i][2];
            x[i][2] = 0;
            spruenge += 1;
            t_sprung = 0;
        }

        for (int j=0;j&lt;3; j++)
        {
            cache[i][j] = v[i][j] + dt/2*f[i][j];
            cache[i][j] = cache[i][j] + dt/2*f2[i][j];
            x[i][j] = x[i][j] + dt*cache[i][j];
        }
    }
}
void integrate_velocity2(double dt)  //Velocity-Algorithmus2
{

    for (int i =0; i&lt;np;i++)
    {
        for (int j=0;j&lt;3; j++)
        {
            v[i][j] = cache[i][j] + dt/2*f[i][j];
            v[i][j] = v[i][j] + dt/2*f2[i][j];
        }
    }
}
//---------------------------------------------Ausgabe-------------------------------------------------------------------

void sample(double DT, ofstream&amp; ausgabe1, ofstream&amp; ausgabe2)
{
    ausgabe1 &lt;&lt; t&lt;&lt;&quot; &quot;&lt;&lt;x[0][2]&lt;&lt; endl;
    cout &lt;&lt; spruenge &lt;&lt;&quot;. Sprung, Sprungzeit : &quot;&lt;&lt;t_sprung&lt;&lt;&quot; Kollisionen : &quot;&lt;&lt;koll &lt;&lt;endl;
    ausgabe2 &lt;&lt;t&lt;&lt;&quot; &quot;&lt;&lt;x[1][2]&lt;&lt;endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/318991/warum-geht-es-unter-linux-und-nicht-unter-windows</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 09:52:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318991.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Aug 2013 20:38:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum geht es unter linux und nicht unter windows?? on Fri, 02 Aug 2013 20:38:15 GMT]]></title><description><![CDATA[<p>Hi, bin gerade am verzweifeln, da ich eine Hausarbeit anfertigen muss und es zuhause leider nie funktioniert zu kompelieren... ien einfaches Programm wei hello world funktionert tadelos, aber folgender code leider nicht. Unter linux in der Uni klappt es imemer ohne Probleme, könnte jemand einmal ausprobieren oder mir evtl sogar sagen warum es nicht klappt ?? es kommt imemr die standard windows fehlermeldung &quot;Programm funktioniert nicht mehr&quot;</p>
<p>Ist leider etwas lang, soll einen Springenden Ball simulieren, die mit einem Federpotential aneinander gekoppelt sind :</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;cmath&gt;
#include&lt;fstream&gt;
#include&lt;math.h&gt;

using namespace std;
void initialize();                                                  //Anfangswerte für x,v,m,time
void force();                                                       //Berechnen der Kraefte/Energie als Funktion der x,v, etc
void integrate_euler(double dt);                                    //Integrieren der Bewegungsgleichung mit Euler-Verfahren
void integrate_velocity1(double dt);                                //Integrieren der Bewegungsgleichung mit Velocity-Verfahren
void integrate_velocity2(double dt);                                //Integrieren der Bewegungsgleichung mit Velocity-Verfahren
void sample(double DT, ofstream&amp; ausgabe1, ofstream&amp; ausgabe2);     //Berechnung verschiedener Observablen und Ausschreiben

double laenge (double w1, double w2, double w3) // Länge im 3-dimensionalen Raum berechnen.
{
    double strecke;
    strecke = sqrt(pow(w1,2)+pow(w2,2)+pow(w3,2));
    return strecke;
}

//-------------------------------------------------------- Variablen einführen-----------------------------------------------
const int np = 2;                     // Anzahl Bälle
double G,k;
double zeit;
int spruenge, koll;
double t_sprung;
double x[np][3];                //Koordinaten (3 Raumdimensionen)
double v[np][3];                //Geschwindigkeit insgesamt
double cache[np][3];            //Zwischenspeicher
double m[np];                   //Massen
double f[np][3];                //Kraefte auf Teilchen (3 Raumdimensionen)
double f2[np][3];               //Kraefte auf Teilchen (3 Raumdimensionen) durch Feder
double ke1,pe1,ke2,pe2;         //kinetische und potentielle Energien
double t;                       //Zeit
double Ballradius;               //Radius der Bälle

//-------------------------------------------------Main----------------------------------------------------------------------
int main(int argc , char* argv[])
{

    //Einlesen der Integrations-Parameter
    const int NMAX =atoi(argv[1]); //Anzahl an Iterationen
    const double DT=atof(argv[2]); //Zeitschritt

    //Energien der Algorithmen
    double energy_e[np][NMAX], energy_v[np][NMAX];

    //Anfangswerte für x,v,m,zeit,G,K,spruenge,t_sprung,t
    initialize();

    //Integriere nmax mal und schreibe Ergebnisse aus
    force();
    ofstream out1; out1.open(&quot;Trajektorie1_e.txt&quot;,ios::out);  //Trajektorie unteres Teilchen
    ofstream out2; out2.open(&quot;Trajektorie2_e.txt&quot;,ios::out);  //Trajektorie oberes Teilchen
    ofstream phase; phase.open(&quot;Phasenraum_e.txt&quot;,ios::out);  //Pahsenraum
    ofstream details; details.open(&quot;zDetails.txt&quot;, ios::out); //Details

    //Euler
    for(int i=1;i&lt;=NMAX;i++)
    {
        force();
        integrate_euler(DT);
        t+=DT;
        //Energie-Euler
        out1 &lt;&lt; ke1 + pe1 &lt;&lt; &quot; &quot;;
        out2 &lt;&lt; ke2 + pe2 &lt;&lt; &quot; &quot;;
        energy_e[0][i] = ke1+ke2+pe1+pe2;
        sample(DT, out1, out2);
        phase &lt;&lt; x[1][2]-x[0][2]&lt;&lt; &quot; &quot;&lt;&lt; x[0][2]+x[1][2]&lt;&lt;endl;

    }
    cout &lt;&lt;&quot;Anzahl der Sprünge : &quot;&lt;&lt;spruenge&lt;&lt;&quot;\nGesamtzeit :&quot;&lt;&lt;t&lt;&lt;endl;
    details &lt;&lt; &quot;Gesamtzeit : \t\t\t\t\t&quot; &lt;&lt; t&lt;&lt;&quot;s\nZeitschritt von :\t\t\t\t&quot;&lt;&lt; DT&lt;&lt;&quot;s\nFederkonstante : \t\t\t\t&quot;&lt;&lt;k&lt;&lt; &quot;\n\nEuler\nAnzahl Bodenkontakte : \t\t\t\t&quot;&lt;&lt; spruenge &lt;&lt; &quot;\nKollisionen der Bälle : \t\t\t&quot;&lt;&lt; koll&lt;&lt;endl;

    out1.close();
    out2.close();
    phase.close();
    //Velocity-Verlet Verfahren
    cout &lt;&lt; &quot;\n_______________________________________________________________\nVelocity-Verlet Verfahren\n_______________________________________________________________&quot;&lt;&lt;endl;
    initialize();
    ofstream out21; out21.open(&quot;Trajektorie1_v.txt&quot;,ios::out);  //Trajektorie unteres Teilchen
    ofstream out22; out22.open(&quot;Trajektorie2_v.txt&quot;,ios::out);  //Trajektorie oberes Teilchen
    ofstream phase2; phase2.open(&quot;Phasenraum_v.txt&quot;,ios::out);  //Pahsenraum

    for(int i=1;i&lt;=NMAX;i++)
    {
        force();
        integrate_velocity1(DT);
        force();
        integrate_velocity2(DT);
        t+=DT;
        //Energie-Velocity-Verlet
        out21 &lt;&lt; ke1 + pe1 &lt;&lt; &quot; &quot; ;
        out22 &lt;&lt; ke2 + pe2 &lt;&lt; &quot; &quot;;
        energy_v[0][i] = ke1+ke2+pe1+pe2;
        sample(DT, out21, out22);
        phase2 &lt;&lt; x[1][2]-x[0][2]&lt;&lt; &quot; &quot;&lt;&lt; x[0][2]+x[1][2]&lt;&lt;endl;
    }
    details &lt;&lt; &quot;\n\nVelocity-Verlet\nAnzahl Bodenkontakte : \t\t\t\t&quot;&lt;&lt; spruenge &lt;&lt; &quot;\nKollisionen der Bälle : \t\t\t&quot;&lt;&lt; koll&lt;&lt;endl;
    cout &lt;&lt;&quot;Anzahl der Sprünge : &quot;&lt;&lt;spruenge&lt;&lt;&quot;\nGesamtzeit :&quot;&lt;&lt;t&lt;&lt; &quot; Energiedifferenz Verlet : &quot; &lt;&lt; energy_v[0][NMAX-1]&lt;&lt; &quot;-&quot;&lt;&lt;energy_v[0][1] &lt;&lt; &quot;= &quot;&lt;&lt; energy_v[0][NMAX-1]-energy_v[0][1] &lt;&lt; &quot;\nEnergiedifferenz Euler : &quot; &lt;&lt; energy_e[0][NMAX-1] &lt;&lt; &quot;-&quot; &lt;&lt;energy_e[0][1]&lt;&lt; &quot;= &quot;&lt;&lt;energy_e[0][NMAX-1] -energy_e[0][1]&lt;&lt;endl;
    details &lt;&lt; &quot;\n\nEnergiedifferenz Velocity-Verlet Verfahren : \t&quot; &lt;&lt; energy_v[0][NMAX-1]-energy_v[0][1]&lt;&lt; &quot;\nEnergiedifferenz Euler Verfahren : \t\t&quot; &lt;&lt; energy_e[0][NMAX-1] -energy_e[0][1] &lt;&lt;endl;
    out21.close();
    out22.close();
    phase2.close();
    details.close();

}
//-----------------------------------------------Initialize----------------------------------------------------------------
void initialize()
{

    //Startwerte
    Ballradius = 0.00005;
    t = 0;
    G = 1;
    k = 35;
    zeit = 0;
    spruenge = 0;
    t_sprung = 0;
    koll = 0;
    double cache[np][3];

    //erstes Teilchen
    m[0] = 1;
    x[0][0] =     0;      /* x-Richtung*/           v[0][0] = 0;
    x[0][1] =     0;      /* y-Richtung*/           v[0][1] = 0;
    x[0][2] =     10;     /* z-Richtung*/           v[0][2] = 0;

    //zweites Teilchen
    m[1] = 1;
    x[1][0] =     0;      /* x-Richtung*/           v[1][0] = 0;
    x[1][1] =     0;      /* y-Richtung*/           v[1][1] = 0;
    x[1][2] =     11;     /* z-Richtung*/           v[1][2] = 0;

}

//-------------------------------------------------Force---------------------------------------------------------------------
void force()
{
    // Schwerkraft
    for (int i =0; i&lt;np;i++)
    {
        f[i][0] = 0;
        f[i][1] = 0;
        f[i][2] = -G*m[i]-v[i][2];
    }

    // Kraft durch Feder
    f2[0][2] = -k*(x[0][2]-x[1][2]+1);
    f2[1][2] = k*(x[0][2]-x[1][2]+1);
    cout &lt;&lt; f2[0][2] &lt;&lt; &quot; &quot; &lt;&lt; f2[1][2] &lt;&lt; endl;

    //Energien
    ke1 = 0.5*m[0]*pow(laenge(v[0][0],v[0][1],v[0][2]),2);
    pe1 = m[0]*G*x[0][2];
    cout &lt;&lt;&quot; Kin : &quot;&lt;&lt; ke1 &lt;&lt; &quot;Pot: &quot;&lt;&lt; pe1 &lt;&lt; &quot; Gesamt : &quot; &lt;&lt; pe1+ke1 &lt;&lt; endl;

    ke2 = 0.5*m[1]*pow(laenge(v[1][0],v[1][1],v[1][2]),2);
    pe2 = m[1]*G*x[1][2];
    cout &lt;&lt; &quot; Kin : &quot;&lt;&lt; ke2 &lt;&lt; &quot;Pot : &quot;&lt;&lt; pe2&lt;&lt; &quot; Gesamt : &quot; &lt;&lt; pe2+ke2 &lt;&lt;endl;

}
//---------------------------------------------------Integrate--------------------------------------------------------------

void integrate_euler(double dt)  //Euler-Algorithmus
{
    zeit += dt;
    t_sprung += dt;

    //Teilche Kollision
    if ((x[1][2]-x[0][2])&lt;Ballradius)
    {
        cache[1][2]=v[1][2] ;
        v[1][2]= v[0][2];
        v[0][2]= cache[1][2];
        koll++;
    }
    for (int i =0; i&lt;np;i++)
    {
        //Bodenkontakt
        if (x[i][2] &lt;= 0)
        {
            v[i][2] = -v[i][2];
            x[i][2] = 0;
            spruenge += 1;
            t_sprung = 0;
        }

        //Integration
        for (int j=0;j&lt;3; j++)
        {
            v[i][j] = v[i][j] + dt*f[i][j];
            v[i][j] = v[i][j] + dt*f2[i][j];
            x[i][j] = x[i][j] + dt*v[i][j];
        }
    }
}
void integrate_velocity1(double dt)  //Velocity-Algorithmus1
{

    zeit += dt;
    t_sprung += dt;
    //Teilche Kollision
    if ((x[1][2]-x[0][2])&lt;Ballradius)
    {
        cache[1][2]=v[1][2] ;
        v[1][2]= v[0][2];
        v[0][2]= cache[1][2];
        koll++;
    }
    for (int i =0; i&lt;np;i++)
    {
        //Bodenkontakt
        if (x[i][2] &lt; 0)
        {
            v[i][2] = -v[i][2];
            x[i][2] = 0;
            spruenge += 1;
            t_sprung = 0;
        }

        for (int j=0;j&lt;3; j++)
        {
            cache[i][j] = v[i][j] + dt/2*f[i][j];
            cache[i][j] = cache[i][j] + dt/2*f2[i][j];
            x[i][j] = x[i][j] + dt*cache[i][j];
        }
    }
}
void integrate_velocity2(double dt)  //Velocity-Algorithmus2
{

    for (int i =0; i&lt;np;i++)
    {
        for (int j=0;j&lt;3; j++)
        {
            v[i][j] = cache[i][j] + dt/2*f[i][j];
            v[i][j] = v[i][j] + dt/2*f2[i][j];
        }
    }
}
//---------------------------------------------Ausgabe-------------------------------------------------------------------

void sample(double DT, ofstream&amp; ausgabe1, ofstream&amp; ausgabe2)
{
    ausgabe1 &lt;&lt; t&lt;&lt;&quot; &quot;&lt;&lt;x[0][2]&lt;&lt; endl;
    cout &lt;&lt; spruenge &lt;&lt;&quot;. Sprung, Sprungzeit : &quot;&lt;&lt;t_sprung&lt;&lt;&quot; Kollisionen : &quot;&lt;&lt;koll &lt;&lt;endl;
    ausgabe2 &lt;&lt;t&lt;&lt;&quot; &quot;&lt;&lt;x[1][2]&lt;&lt;endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343077</guid><dc:creator><![CDATA[insain]]></dc:creator><pubDate>Fri, 02 Aug 2013 20:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to Warum geht es unter linux und nicht unter windows?? on Fri, 02 Aug 2013 20:44:29 GMT]]></title><description><![CDATA[<p>Sry, hatte die Startargumente unter Windows vergessen... unter Linux kam immer eine geeignite Fehlermeldung. War etwas überreizt, da ich QT 3 mal neuinstalliert habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Aber habe trotzdem noch eine Frage, weis nicht ob ich hier Richtig bin, aber ist mein Integrationsverfahren Richtig ? Ich verliere nämlich Energie relativ schnell, was ja eigtl nicht Sein sollte....</p>
<p>Die Kraft wird so berechnet :</p>
<pre><code>void force()
{
    // Schwerkraft
    for (int i =0; i&lt;np;i++)
    {
        f[i][0] = 0;
        f[i][1] = 0;
        f[i][2] = -G*m[i]-v[i][2];
    }

    // Kraft durch Feder
    f2[0][2] = -k*(x[0][2]-x[1][2]+1);
    f2[1][2] = k*(x[0][2]-x[1][2]+1);
    cout &lt;&lt; f2[0][2] &lt;&lt; &quot; &quot; &lt;&lt; f2[1][2] &lt;&lt; endl;
</code></pre>
<p>und integriert wird dann so :</p>
<pre><code>void integrate_euler(double dt)  //Euler-Algorithmus
{

    for (int i =0; i&lt;np;i++)
    {
        //Bodenkontakt
        if (x[i][2] &lt;= 0)
        {
            v[i][2] = -v[i][2];
            x[i][2] = 0;
            spruenge += 1;
            t_sprung = 0;
        }

        //Integration
        for (int j=0;j&lt;3; j++)
        {
            v[i][j] = v[i][j] + dt*f[i][j];
            v[i][j] = v[i][j] + dt*f2[i][j];
            x[i][j] = x[i][j] + dt*v[i][j];
        }
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2343081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343081</guid><dc:creator><![CDATA[insain]]></dc:creator><pubDate>Fri, 02 Aug 2013 20:44:29 GMT</pubDate></item><item><title><![CDATA[Reply to Warum geht es unter linux und nicht unter windows?? on Fri, 02 Aug 2013 20:46:08 GMT]]></title><description><![CDATA[<p>Zeile 45 und daraus resultierend Zeile 49.</p>
<p>Bei einem Array</p>
<pre><code>int x[N];
</code></pre>
<p>muss N immer konstant sein. Das heisst zur Compilezeit konstant, nicht irgendwann zur Laufzeit konstant.</p>
<p>Und dein NMAX wird beim Start des Programms aus den Argumenten der Kommandozeile ausgewertet (Laufzeit), konstant gesagt und als Arraygröße genutzt. Das geht nicht.<br />
Der GCC hat da eine Erweiterung (VLA heisst die glaube ich), dass der das schluckt.</p>
<p>Nimm statt</p>
<pre><code>double energy_e[np][NMAX];
// und
double ernergy_v[np][NMAX];
</code></pre>
<p>lieber</p>
<pre><code>std::vector&lt;std::vector&lt;double&gt;&gt; energy_e(np, std::vector&lt;double&gt;(NMAX));
// und
std::vector&lt;std::vector&lt;double&gt;&gt; energy_v(np, std::vector&lt;double&gt;(NMAX));
</code></pre>
<p>Ist sicherer.</p>
<p>(Und irgendwo hast du einen Laufzeitfehler, ich vermute du hälst Arraygrenzen nicht ein, aber ich gucke deinen Code nicht durch, weil nicht schön.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2343082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2343082</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 02 Aug 2013 20:46:08 GMT</pubDate></item></channel></rss>