Aide débutante en programmation

Fermé
laroche1 Messages postés 5 Date d'inscription samedi 24 février 2007 Statut Membre Dernière intervention 29 avril 2007 - 24 févr. 2007 à 17:28
jackou82 Messages postés 5 Date d'inscription mercredi 29 mars 2006 Statut Membre Dernière intervention 30 avril 2013 - 24 févr. 2007 à 18:50
Bonjour,
J'ai un petit soucis avec mon programme, en fait j'ai l'impression qu'il ne finit jamais et comme je ne suis qu'une simple débutante en programmation j'aurais besoin de votre aide;
Je vous explique brievement mon programme: je travaille sur le champ magnétique d'une zone sur Mars, et j'avais pensé creer un petit programme me permettant de prédire le champ magnétique crée par une source dont on connait sa position pour une zone donnée. Dans la fenetre de commande, j'aimerai rentrer tous mes parametres type: calcul.exe <prof_source> <latitude_source> <long_source> <lat_min de ma zone d'etude> <lat_max> <lon_min> <lon_max> <altitide du satellite qui est constante> <Mr moment magnétique r > <Mt> <Mp> <resolution> <fichier de sortie ou je vais stocker mes valeurs Br BT bp>

en fait je veux rentrer tous ces parametres afin qu'il puisse me calculer Br BT et Bp à la fin, or quand je lance ce programme, il ne finit jamais , j'ai surement une erreur de formulation dans ma boucle ou dans le fait d'afficher mes parametres mais je ne vois pas et je vous demande une petite aide!!!! je vous remercie par avance

//*Calcul_champ_mag.exe*/
/*on va entrer plusieurs parametres afin de calculer le champ magnetique */

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <malloc.h>

#define M_PI 3.14159265358979323846
#define PI_180 (M_PI / 180.0)
#define rp 3393.5


#define WRITEl1 "%lf %lf %lf %lf %lf %lf %lf \n"



int main(argc, argv)
int argc;
char *argv[];
{
FILE *fout, *f;
char str[200];
double r, theta, phi; //*parametres d'observation */
double alt, lat, lon;
double lat_min, lat_max;
double lon_min, lon_max;
double r_d, theta_d, phi_d; //*parametres du dipole */
double prof_d, lat_d, lon_d;
double Mr_d, Mt_d ,Mp_d;
double l;
double A1, A2, A3;
double B1, B2, B3;
double C1, C2, C3;
double F1, F2, F3;
double Br, Btheta, Bphi;
double x;
double resol;
int i;
double D1,D2,D3;
double prod1, prod2, prod3;
double prod11, prod21, prod31;
double prod111,prod211, prod311;
double F;
double inc;
double l3;

printf("############################################################\n");
printf("Calcul_champ_mag.exe\n\n");
/*printf("\tEntrez les parametres necessaires :\n");*/
printf("Calcul_champ_mag.exe <prof_d> <lat_d> <lon_d> <lat_min> <lat_max> <lon_min> <lon_max> <alt> <Mr_d> <Mt_d> <Mp_d> <inc> <fout> \n");
/* lire les inputs */
prof_d=atof(argv[1]);
scanf("%lf", &prof_d);
lat_d=atof(argv[2]);
scanf("%lf", &lat_d);
lon_d=atof(argv[3]);
scanf("%lf", &lon_d);
lat_min = atof(argv[4]);
scanf("%lf", &lat_min);
lat_max = atof(argv[5]);
scanf("%lf", &lat_max);
lon_min=atof(argv[6]);
scanf("%lf", &lon_min);
lon_max=atof(argv[7]);
scanf("%lf", &lon_max);
alt=atof(argv[8]);
scanf("%lf", &alt);
Mr_d=atof(argv[9]);
scanf("%lf", &Mr_d);
Mt_d=atof(argv[10]);
scanf("%lf", &Mt_d);
Mp_d=atof(argv[11]);
scanf("%lf", &Mp_d);
inc = atof(argv[12]);
scanf("%lf", &inc);






/*modification pour avoir des degres --- a changer*/
/*lat_d = 90.-thetad/PI_180;*/
/*lon_d = phid/PI_180;*/
/*prof_d = rd - rp;*/


theta_d = 90.-(lat_d*PI_180);
phi_d = lon_d*PI_180;
r_d = prof_d+rp;

/* calcul */
for (lat=lat_min; lat<lat_max; lat += inc)
for(lon=lon_min; lon<lon_max; lon +=inc)
{

theta = 90.-(lat*PI_180);
phi = lon*PI_180;
r = alt+rp;



/* calcul des parametres A*/

A1=cos(theta)*cos(theta_d)+sin(theta)*sin(theta_d)*cos(phi-phi_d);
A2=-sin(theta)*cos(theta_d)+cos(theta)*sin(theta_d)*cos(phi-phi_d);
A3=-sin(theta_d)*sin(phi-phi_d);

/*calcul des parametres B*/

B1=cos(theta)*sin(theta_d)-sin(theta)*cos(theta_d)*cos(phi-phi_d);
B2=-sin(theta)*sin(theta_d)-cos(theta)*cos(theta_d)*cos(phi-phi_d);
B3=cos(theta)*sin(phi-phi_d);

/*calcul des parametres C*/

C1=sin(theta)*sin(phi-phi_d);
C2=cos(theta)*sin(phi-phi_d);
C3=cos(phi-phi_d);

/*calcul de l*/
x=acos(cos(theta)*cos(theta_d)+sin(theta)*sin(theta_d)*cos(phi-phi_d));
l=sqrt((r_d*r_d)+(r*r)-2*r_d*r*cos(x));

/*calcul des parametres D*/
D1=r-r_d*A1;
D2=-r_d*A2;
D3=-r_d*A3;

/*calcul des parametres F*/
F1=r*A1-r_d;
F2=-r*B1;
F3=r*C1;

/*calcul prod1 prod2 prod3 pour Br*/
prod1=((3*D1*F1)/(l*l))-A1;
prod2=((3*D1*F2)/(l*l))+B1;
prod3=((3*D1*F3)/(l*l))-C1;

/*calcul prod11 prod21 prod31 pour Btheta*/
prod11=((3*D2*F1)/(l*l))-A2;
prod21=((3*D2*F2)/(l*l))+B2;
prod31=((3*D2*F3)/(l*l))-C2;

/*calcul prod111 prod211 prod311 pour Bphi*/
prod111=((3*D3*F1)/(l*l))-A3;
prod211=((3*D3*F2)/(l*l))+B3;
prod311=((3*D3*F3)/(l*l))-C3;


/*Calcul des composantes du champ magnetique*/
l3=l*l*l;
Br=Mr_d*(prod1/(l3))+Mt_d*(prod2/(l3))+Mp_d*(prod3/(l3));
Btheta=Mr_d*(prod11/(l3))+Mt_d*(prod21/(l3))+Mp_d*(prod31/(l3));
Bphi=Mr_d*(prod111/(l3))+Mt_d*(prod211/(l3))+Mp_d*(prod311/(l3));

/*calcul du champ*/

/* sortie vers fichier */

fprintf(fout, WRITEl1,prof_d,lat_d,lon_d,alt,Br,Btheta,Bphi);

}
}
A voir également:

1 réponse

jackou82 Messages postés 5 Date d'inscription mercredi 29 mars 2006 Statut Membre Dernière intervention 30 avril 2013
24 févr. 2007 à 18:50
Bonsoir,j'ai vu ton inquiètude mais je pense que pour mieux résoudre ton problème il faudra utiliser la programmation orientée objet dans laquelle se trouve la notion de classes d'objets.
pour un début c'est un peu difficille mais dès que tu commence ça ira.
Ou encore garde ton code source comme il est mais tu le reprend en utilisant les procedures et les fonctions pour chaque tâche nécessaire
0