for schleife
-
Hi,
kann mir jemand einen Tip geben.
Die erste for Schleife in der Funktion wird nicht richtig initialisiert. d wird nicht auf null gesetzt.Stephan
#include <stdio.h> #include <stdlib.h> #include <math.h> const int DIM=1; typedef struct Particle { double m; double x[DIM]; double F[DIM]; } ; struct Particle p[1], pp[1]; #define sqr(x) ((x)*(x)) void force(struct Particle *i, struct Particle *j ) { double r=0; for (int d=0; d<DIM; d++) r += (j->x[d]-i->x[d]); double f=i->m*j->m/(sqrt(r)*r); for (int d=0; d<DIM; d++) i->F[d]+=f*(j->x[d]-i->x[d]); } int main() { p[0].m=1.0; p[0].x[0]=0; p[0].x[1]=0; p[1].m=3e-6; p[1].x[0]=0; p[1].x[1]=1; force(&p[0],&p[1]); return(0); }
-
Der erste offensichtliche Fehler, der mir auffällt, ist, dass DIM zu klein gesetzt ist. Je nach Aufbau des Stacks kann sich da locker Kram gegenseitig überschreiben. Setz DIM auf 2 und kuck obs dann läuft.
-
Hallo,
1. wenn du schon
typedef struct Particle....
schreibst, dann kannst du auch zur Deklaration
Particle p[1], pp[1];
verwenden!
So wie du die Variable d in der for-Schleife definierst, geht es glaub ich nur in C++, in C ist das kein Standard!??
int d; for (d=0;.....);
docu schrieb:
struct Particle p[1], pp[1]; //du legst speicher für 1 struct an, also nur //p[0] ist gültig int main() { p[0].m=1.0; p[0].x[0]=0; p[0].x[1]=0; p[1].m=3e-6; p[1].x[0]=0; p[1].x[1]=1; // du hast kein speicherplatz für p[1] force(&p[0],&p[1]); return(0); }
du meinst wohl
int main() { p[0].m=1.0; p[0].x[0]=0; p[0].x[1]=0; pp[0].m=3e-6; pp[0].x[0]=0; pp[0].x[1]=1; force(&p[0],&pp[0]); return(0); }
Über den Algo. hab ich mir noch keine Gedanken gemacht. Fals ich falsch liege, dann lass es mich wissen! Ich wollte doch nur helfen!
Chiao
-
Oh, ja.
typedef struct Particle { double m; double x[DIM]; double F[DIM]; } ;
Ist auch Bogus, da kein Name, unter dem das typedef laufen soll, angegeben wird. Es mag sein, dass manche Compiler das akzeptieren, aber richtig wäre entweder
struct Particle { double m; double x[DIM]; double F[DIM]; }; /* ... */ struct Particle p;
Oder
typedef struct { double m; double x[DIM]; double F[DIM]; } Particle; /* ... */ Particle p;
-
der Fehler war die Variableninitialisierung in dem Kopf. Die anderen Tips habe ich auch ausprobiert. Der Code läuft jetzt bestens. Danke 0xdeadbeef und /bin/bash0R