Rebonjour,
J'ai un autre petit soucis cette fois avec la programmation en c
Je vous explique mon soucis
J'ai deux fichiers
Un où j'ai pleins de paramètres repartis en colonnes
et l'autre où je voudrais lui demander de lui une ligne de l'autre fichier or je ne sais pas comment lui faire comprendre
voici mon premier fichier "dipole.vec" avec par colonne la lat_d,lon_d,prof_d,M,I,D (crée sous xemacs)
0 0 40 5 90 0
0 0 40 5 60 0
0 0 40 5 30 0
et j'amerais le lire (par lignes) dans fin quand je rentre mes diférents parametres "calcul_champ_mag_exe. <fin>...."
et voici mon code en c
//*Calcul_champ_mag1.exe*/
/*on va entrer plusieurs parametres afin de calculer le champ magnetique */
/*dans ce fichier on calcule Mr_d,Mt_d et Mp_d a partir de I et D*/
#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 READl1 "% % % %lf %lf %lf\n"
#define WRITEl2 "% % % %13.9lf %13.9lf %13.9lf\n"
int main(argc, argv)
int argc;
char *argv[];
{
FILE *fout, *f, *fin;
int row;
double M, I, D;
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");*/
if(argc!=15 )
{
prinf("erreur nombre de parametres\n");
exit(-1);
}
printf("Calcul_champ_mag.exe <fin> <lat_min> <lat_max> <lon_min> <lon_max> <alt> <inc> <fout> \n");
/* lire les inputs */
fin= fopen(argv [1],"r");
for (i=0;i<row;i++)
{
fscanf(fin, READl,
&lat_d,&lon_d,&prof_d,&M,&I,&D);
}
lat_min = atof(argv[2]);
lat_max = atof(argv[3]);
lon_min=atof(argv[4]);
lon_max=atof(argv[5]);
alt=atof(argv[6]);
inc = atof(argv[7]);
fout = fopen(argv[8],"w");
if(fout==NULL)
{
return 0;
}
/*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 = rp-prof_d;
/*calcul de Mr_d, Mt_d,Mp_d dont les resultats seront ecrits dans un autre fichier */
I_rad=I*PI_180
D_rad=D*PI_180
Mr_d=M*sin(I_rad);
Mt_d=M*cos(I_rad)*cos(D_rad);
Mp_d=M*cos(I_rad)*sin(D_rad);
/* calcul */
for (lat=lat_min+(inc/2); lat<lat_max+(inc/2); lat += inc)
for(lon=lon_min+(inc/2); lon<lon_max+(inc/2); 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_d)*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 en nanotesla*/
l3=l*l*l;
Br=(Mr_d*(prod1/(l3))+Mt_d*(prod2/(l3))+Mp_d*(prod3/(l3)))*1000000000.;
Btheta=(Mr_d*(prod11/(l3))+Mt_d*(prod21/(l3))+Mp_d*(prod31/(l3)))*1000000000.;
Bphi=(Mr_d*(prod111/(l3))+Mt_d*(prod211/(l3))+Mp_d*(prod311/(l3)))*1000000000.;
/*calcul du champ*/
/* sortie vers fichier */
fprintf(fout, WRITEl2,lat,lon,alt,Mr_d,Mt_d,Mp_d,Br,Btheta,Bphi);
}
fclose(fout);
fclose(fin);
}
je vous remerci