#1 Le 29/04/2007, à 10:39
- laroche1
aide pour modification d'un fichier en c
Bonjour,
Voila je dois modifier un code en c , mais ce dernier n'etant pas été réalisé par moi , je suis totalement perdue.
Voila c'est un peu compliqué comme modification.
Dans le fichier original (fichier toto.c), on demande de lire un autre fichier X c'est à dire lire le jour et la position , les composantes et calculer la moyenne par case suivant des incréments definis. A la fin mon fichier de sortie donne la moyenne et j'obtiens un nombre différent de lignes puisque je fais le calcul par case.
Maintenant, il faudrait que je retrouve dans mon fichier de sortie le jour et la position de mon fichier X , de reprendre les valeurs de moyenne que j'ai obtenu dans le 1er exemple et donc par conséquent retrouver le meme nombre de lignes que mon fichier X (data_in doit etre egale à filled_bin (cf fichier de mon fichier en c)) et de calculer les écarts entre les comosantes de mon fichier X et les données moyennes.
Or mon probleme c'est que je n'arrive pas à voir ou je dois faire toutes ces modifications et donc je fais appel à vous tous. C'est surtout dans l'ecriture des fichiers de sorties (je pense...mais c pas sur )
Mon fichier en .c qui permet de me calculer la moyenne
Voici la ligne de commande que j'utilise
toto.exe 2 (pour avoir la moyenne) fichier X (fichier d'entreé) toto(fichier de sortie) 350 450 -80 -10 0 130 0.25 0.25 100
for (l = 0; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 0)
{
filled_bin ++;
if (NPT[index] > 2)
{
filled_bin2 ++;
}
if (NPT[index] > 1)
{
filled_bin1 ++;
}
}
}
}
for (l = 0; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 1)
{
lat = lat_min + (double)l*inc_lat + inc_lat/2.;
lon = lon_min + (double)L*inc_lon + inc_lon/2.;
if (lon >= 360.)
lon -= 360.;
fprintf(fout, "%7.3lf %7.3lf", lon, lat);
for (i=0;i<NPT[index]; i++)
{
fprintf(fout, " %7.3lf", alt_var[index][i]);
}
fprintf(fout, "\n");
}
}
}
}
fclose(fout);
fprintf(stdout, "\tNombre de donnees lues : %10d\n", data_in);
fprintf(stdout, "\tNombre de donnees utilisees : %10d\n", data_out);
fprintf(stdout, "\tNombre de bin remplis : %10d\n", filled_bin);
fprintf(stdout, "\tNombre de bin remplis (N>1) : %10d\n", filled_bin1);
fprintf(stdout, "\tNombre de bin remplis (N>2) : %10d\n", filled_bin2);
}
un exemple de mon fichier X
jour lat lon alt br bt bp
2032.376403461 -10.894 129.987 383.150 -0.343 2.969 -0.746
2032.376438183 -11.047 129.967 383.062 -0.238 2.897 -0.816
2032.376472905 -11.201 129.946 382.975 -0.073 2.852 -0.937
2032.376507627 -11.354 129.926 382.888 0.071 2.841 -0.909
2032.376542350 -11.507 129.905 382.801 0.179 2.798 -0.991
2032.376577072 -11.660 129.885 382.713 0.129 2.481 -1.074
2032.376611794 -11.814 129.865 382.626 -0.214 2.334 -1.152
2032.376646516 -11.967 129.844 382.539 -0.290 2.313 -1.335
2032.376681238 -12.120 129.824 382.451 -0.630 1.719 -1.366
2032.376715961 -12.273 129.803 382.364 -0.291 1.904 -1.246
2032.376750683 -12.427 129.783 382.277 0.457 2.238 -1.572
2032.376785405 -12.580 129.762 382.189 0.178 1.494 -2.112
2032.376820127 -12.733 129.742 382.102 0.141 1.222 -3.440
2032.376854850 -12.887 129.721 382.015 0.307 1.841 -3.410
2032.376889572 -13.040 129.701 381.928 0.297 1.476 -3.188
2032.376924294 -13.193 129.681 381.840 0.578 1.367 -2.435
2032.376959016 -13.347 129.660 381.754 0.817 0.995 -2.065
2032.376993738 -13.500 129.639 381.666 -0.052 0.132 -1.559
2032.377028461 -13.653 129.619 381.579 -0.692 -0.211 -1.205
Voila je vous remercie de votre aide eventuelle
Hors ligne
#2 Le 29/04/2007, à 10:50
- laroche1
Re : aide pour modification d'un fichier en c
fichier en c
int main(argc, argv)
int argc;
char *argv[];
{
FILE *fin, *fout;
FILE *fout_00, *fout_01, *fout_02, *fout_03, *fout_04;
FILE *fout_05, *fout_06, *fout_07, *fout_08, *fout_09;
FILE *fout_10, *fout_11, *fout_12, *fout_13, *fout_14;
FILE *fout_15, *fout_16, *fout_17, *fout_18, *fout_19;
FILE *fout_20, *fout_21, *fout_22, *fout_23, *fout_24;
FILE *fout_25, *fout_26, *fout_27, *fout_28, *fout_29;
FILE *fout_30, *fout_31, *fout_32, *fout_33, *fout_34;
FILE *fout_35, *fout_36, *fout_37, *fout_38, *fout_39;
FILE *fout_40, *fout_41, *fout_42, *fout_43, *fout_44;
FILE *fout_45, *fout_46, *fout_47, *fout_48, *fout_49;
char str[200];
double alt_max, alt_min;
double lat_max, lat_min;
double lon_max, lon_min;
int choix;
int data_in, data_out;
int filled_bin=0;
int filled_bin1=0;
int filled_bin2=0;
double inc_lon, inc_lat, inc_alt;
double amp_lon, amp_lat, amp_alt;
int npt_lon, npt_lat, npt_alt;
int l, L, A;
double dday, lat, lon, alt, br, bt, bp;
int index_alt;
int npt_tot;
double **BR, **BT, **BP;
double **alt_var;
double *BR_max, *BT_max, *BP_max;
double *BR_min, *BT_min, *BP_min;
double *BR_moy, *BT_moy, *BP_moy;
double *BR_med, *BT_med, *BP_med;
double *BR_std, *BT_std, *BP_std;
double std_br, std_bt, std_bp;
double sum_br, sum_bt, sum_bp;
double dif_br, dif_bt, dif_bp;
int i, j, k, index;
int *NPT;
char dl[1];
double temp;
int d;
double dd;
dday = 0.0;
/* Introduction */
printf("############################################################\n");
printf("binthedata.exe\n\n");
/* Test the number of parameters */
if (argc != 6 && argc != 10 && argc != 13)
{
printf("\tYou must call 6, 10 or 13 parameters!\n");
printf("\tbinthedata.exe <choix> <fin> <fout> <alt_min> <alt_max>\n");
printf("\tand eventually <lat_min> <lat_max> <lon_min> <<lon_max>\n");
printf("\tand eventually <inc_lat> <inc_lon> <inc_alt>\n");
printf("\t<choix> = 1 (median) or 2 (average) or 3 (minimum) or 4 (maximum)\n");
printf("\t<choix> = 5 : one data per orbit per bin.\n");
exit(-1);
}
choix = atoi(argv[1]);
if (choix != 1 && choix != 2 && choix != 3 && choix != 4 && choix != 5)
{
printf("\tBad <choix> value. Must be 1 <-> 5. Please check!\n");
exit(-1);
}
fin = fopen(argv[2], "r");
if (fin == NULL)
{
printf("Reading error on input file <%s>\n. Please check!\n", argv[2]);
exit(-1);
}
fout = fopen(argv[3], "w");
if (fin == NULL)
{
printf("Writing error on output file <%s>\n. Please check!\n", argv[3]);
fclose(fin);
exit(-1);
}
/* Minimum and Maximum altitude */
alt_min = atof(argv[4]);
alt_max = atof(argv[5]);
if (argc == 10 || argc == 13)
{
lat_min = atof(argv[6]);
lat_max = atof(argv[7]);
lon_min = atof(argv[8]);
lon_max = atof(argv[9]);
}
else
{
lat_min = -90.;
lat_max = 90.;
lon_min = 0.;
lon_max = 360.;
}
if (argc == 13)
{
inc_lat = atof(argv[10]);
inc_lon = atof(argv[11]);
inc_alt = atof(argv[12]);
}
else
{
inc_lat = 1.;
inc_lon = 1.;
inc_alt = 10.;
}
/**** Verification ****/
if (alt_min < 0.)
{
do
{
printf("\t<alt_min> lower than 0! Please enter a new value (0.)\n");
fgets(str, 150, stdin);
if (str[0] == '\n') alt_min = 0.;
else
{
sscanf(str, "%lf", &alt_min);
}
}
while (alt_max < 0.);
}
if (alt_max > 1000.)
{
do
{
printf("\t<alt_max> greater than 1000! Please enter a new value (1000.)\n");
fgets(str, 150, stdin);
if (str[0] == '\n') alt_max = 1000.;
else
{
sscanf(str, "%lf", &alt_max);
}
}
while (alt_max > 1000.);
}
if (alt_min > alt_max)
{
printf("\t<alt_min> greater than <alt_max>.\n");
printf("\tPlease check. Exit!\n");
fclose(fin);
exit(-1);
}
if (lat_min > lat_max)
{
printf("\tError in latitude range. Please check!\n");
exit(-1);
}
/* parametres */
/* Initialisation */
amp_lat = lat_max - lat_min;
if (lon_max < lon_min)
amp_lon = 360. + lon_max - lon_min;
else
amp_lon = lon_max - lon_min;
amp_alt = alt_max - alt_min;
npt_lat = (int)(amp_lat / (double)inc_lat);
npt_lon = (int)(amp_lon / (double)inc_lon);
npt_alt = (int)(amp_alt / (double)inc_alt);
fprintf(stdout, "Nombre de points = %d (lat) x %d (lon) x %d (alt)\n",
npt_lat, npt_lon, npt_alt);
l = 0 ; L = 0 ; A = 0 ;
lat = lat_min + (double)l*inc_lat;
fprintf(stdout, "\tL'intervalle lat est %7.3lf/", lat);
l = npt_lat; L = 0 ; A = 0 ;
lat = lat_min + (double)l*inc_lat;
fprintf(stdout, "%7.3lf\n", lat);
l = 0 ; L = 0 ; A = 0 ;
lon = lon_min + (double)L*inc_lon;
fprintf(stdout, "\tL'intervalle lon est %7.3lf/", lon);
l = 0 ; L = npt_lon; A = 0 ;
lon = lon_min + (double)L*inc_lon;
fprintf(stdout, "%7.3lf\n", lon);
l = 0 ; L = 0 ; A = 0 ;
alt = alt_min + (double)A*inc_alt;
fprintf(stdout, "\tL'intervalle alt est %7.3lf/", alt);
l = 0 ; L = 0 ; A = npt_alt;
alt = alt_min + (double)A*inc_alt;
fprintf(stdout, "%7.3lf\n", alt);
fflush(stdout);
/**** Lecture et ecriture des donnees triees par altitude ****/
fprintf(stdout, "\n\tOuverture des fichiers");
fflush(stdout);
fout_00 = fopen("temp_00.alt", "w");
fout_01 = fopen("temp_01.alt", "w");
fout_02 = fopen("temp_02.alt", "w");
fout_03 = fopen("temp_03.alt", "w");
fout_04 = fopen("temp_04.alt", "w");
fout_05 = fopen("temp_05.alt", "w");
fout_06 = fopen("temp_06.alt", "w");
fout_07 = fopen("temp_07.alt", "w");
fout_08 = fopen("temp_08.alt", "w");
fout_09 = fopen("temp_09.alt", "w");
fout_10 = fopen("temp_10.alt", "w");
fout_11 = fopen("temp_11.alt", "w");
fout_12 = fopen("temp_12.alt", "w");
fout_13 = fopen("temp_13.alt", "w");
fout_14 = fopen("temp_14.alt", "w");
fout_15 = fopen("temp_15.alt", "w");
fout_16 = fopen("temp_16.alt", "w");
fout_17 = fopen("temp_17.alt", "w");
fout_18 = fopen("temp_18.alt", "w");
fout_19 = fopen("temp_19.alt", "w");
fout_20 = fopen("temp_20.alt", "w");
fout_21 = fopen("temp_21.alt", "w");
fout_22 = fopen("temp_22.alt", "w");
fout_23 = fopen("temp_23.alt", "w");
fout_24 = fopen("temp_24.alt", "w");
fout_25 = fopen("temp_25.alt", "w");
fout_26 = fopen("temp_26.alt", "w");
fout_27 = fopen("temp_27.alt", "w");
fout_28 = fopen("temp_28.alt", "w");
fout_29 = fopen("temp_29.alt", "w");
fout_30 = fopen("temp_30.alt", "w");
fout_31 = fopen("temp_31.alt", "w");
fout_32 = fopen("temp_32.alt", "w");
fout_33 = fopen("temp_33.alt", "w");
fout_34 = fopen("temp_34.alt", "w");
fout_35 = fopen("temp_35.alt", "w");
fout_36 = fopen("temp_36.alt", "w");
fout_37 = fopen("temp_37.alt", "w");
fout_38 = fopen("temp_38.alt", "w");
fout_39 = fopen("temp_39.alt", "w");
fout_40 = fopen("temp_40.alt", "w");
fout_41 = fopen("temp_41.alt", "w");
fout_42 = fopen("temp_42.alt", "w");
fout_43 = fopen("temp_43.alt", "w");
fout_44 = fopen("temp_44.alt", "w");
fout_45 = fopen("temp_45.alt", "w");
fout_46 = fopen("temp_46.alt", "w");
fout_47 = fopen("temp_47.alt", "w");
fout_48 = fopen("temp_48.alt", "w");
fout_49 = fopen("temp_49.alt", "w");
data_in = data_out = 0;
fprintf(stdout,"\tLecture et tri par altitude...\n");
fflush(stdout);
while(!feof(fin))
{
/* fscanf(fin, READl, LECTl1); */
/* fscanf(fin, READl, LECTl2); */
fscanf(fin, READld, LECTld);
data_in ++;
if (lon < 0.)lon += 360.;
else if (lon >= 360.)lon -= 360.;
if (lat >= lat_min && lat < lat_max && alt >= alt_min && alt < alt_max)
{
if ((lon_min < lon_max && lon >= lon_min && lon < lon_max) ||
(lon_min > lon_max && (lon >= lon_min || lon < lon_max)))
{
index_alt = (int)((alt - alt_min)/inc_alt);
data_out ++;
switch(index_alt)
{
case 0:
{
fprintf(fout_00, WRITEl, ECRITl);
break;
}
case 1:
{
fprintf(fout_01, WRITEl, ECRITl);
break;
}
case 2:
{
fprintf(fout_02, WRITEl, ECRITl);
break;
}
case 3:
{
fprintf(fout_03, WRITEl, ECRITl);
break;
}
case 4:
{
fprintf(fout_04, WRITEl, ECRITl);
break;
}
case 5:
{
fprintf(fout_05, WRITEl, ECRITl);
break;
}
case 6:
{
fprintf(fout_06, WRITEl, ECRITl);
break;
}
case 7:
{
fprintf(fout_07, WRITEl, ECRITl);
break;
}
case 8:
{
fprintf(fout_08, WRITEl, ECRITl);
break;
}
case 9:
{
fprintf(fout_09, WRITEl, ECRITl);
break;
}
case 10:
{
fprintf(fout_10, WRITEl, ECRITl);
break;
}
case 11:
{
fprintf(fout_11, WRITEl, ECRITl);
break;
}
case 12:
{
fprintf(fout_12, WRITEl, ECRITl);
break;
}
case 13:
{
fprintf(fout_13, WRITEl, ECRITl);
break;
}
case 14:
{
fprintf(fout_14, WRITEl, ECRITl);
break;
}
case 15:
{
fprintf(fout_15, WRITEl, ECRITl);
break;
}
case 16:
{
fprintf(fout_16, WRITEl, ECRITl);
break;
}
case 17:
{
fprintf(fout_17, WRITEl, ECRITl);
break;
}
case 18:
{
fprintf(fout_18, WRITEl, ECRITl);
break;
}
case 19:
{
fprintf(fout_19, WRITEl, ECRITl);
break;
}
case 20:
{
fprintf(fout_20, WRITEl, ECRITl);
break;
}
case 21:
{
fprintf(fout_21, WRITEl, ECRITl);
break;
}
case 22:
{
fprintf(fout_22, WRITEl, ECRITl);
break;
}
case 23:
{
fprintf(fout_23, WRITEl, ECRITl);
break;
}
case 24:
{
fprintf(fout_24, WRITEl, ECRITl);
break;
}
case 25:
{
fprintf(fout_25, WRITEl, ECRITl);
break;
}
case 26:
{
fprintf(fout_26, WRITEl, ECRITl);
break;
}
case 27:
{
fprintf(fout_27, WRITEl, ECRITl);
break;
}
case 28:
{
fprintf(fout_28, WRITEl, ECRITl);
break;
}
case 29:
{
fprintf(fout_29, WRITEl, ECRITl);
break;
}
case 30:
{
fprintf(fout_30, WRITEl, ECRITl);
break;
}
case 31:
{
fprintf(fout_31, WRITEl, ECRITl);
break;
}
case 32:
{
fprintf(fout_32, WRITEl, ECRITl);
break;
}
case 33:
{
fprintf(fout_33, WRITEl, ECRITl);
break;
}
case 34:
{
fprintf(fout_34, WRITEl, ECRITl);
break;
}
case 35:
{
fprintf(fout_35, WRITEl, ECRITl);
break;
}
case 36:
{
fprintf(fout_36, WRITEl, ECRITl);
break;
}
case 37:
{
fprintf(fout_37, WRITEl, ECRITl);
break;
}
case 38:
{
fprintf(fout_38, WRITEl, ECRITl);
break;
}
case 39:
{
fprintf(fout_39, WRITEl, ECRITl);
break;
}
case 40:
{
fprintf(fout_40, WRITEl, ECRITl);
break;
}
case 41:
{
fprintf(fout_41, WRITEl, ECRITl);
break;
}
case 42:
{
fprintf(fout_42, WRITEl, ECRITl);
break;
}
case 43:
{
fprintf(fout_43, WRITEl, ECRITl);
break;
}
case 44:
{
fprintf(fout_44, WRITEl, ECRITl);
break;
}
case 45:
{
fprintf(fout_45, WRITEl, ECRITl);
break;
}
case 46:
{
fprintf(fout_46, WRITEl, ECRITl);
break;
}
case 47:
{
fprintf(fout_47, WRITEl, ECRITl);
break;
}
case 48:
{
fprintf(fout_48, WRITEl, ECRITl);
break;
}
case 49:
{
fprintf(fout_49, WRITEl, ECRITl);
break;
}
}
}
}
}
fclose(fout_00);
fclose(fout_01);
fclose(fout_02);
fclose(fout_03);
fclose(fout_04);
fclose(fout_05);
fclose(fout_06);
fclose(fout_07);
fclose(fout_08);
fclose(fout_09);
fclose(fout_10);
fclose(fout_11);
fclose(fout_12);
fclose(fout_13);
fclose(fout_14);
fclose(fout_15);
fclose(fout_16);
fclose(fout_17);
fclose(fout_18);
fclose(fout_19);
fclose(fout_20);
fclose(fout_21);
fclose(fout_22);
fclose(fout_23);
fclose(fout_24);
fclose(fout_25);
fclose(fout_26);
fclose(fout_27);
fclose(fout_28);
fclose(fout_29);
fclose(fout_30);
fclose(fout_31);
fclose(fout_32);
fclose(fout_33);
fclose(fout_34);
fclose(fout_35);
fclose(fout_36);
fclose(fout_37);
fclose(fout_38);
fclose(fout_39);
fclose(fout_40);
fclose(fout_41);
fclose(fout_42);
fclose(fout_43);
fclose(fout_44);
fclose(fout_45);
fclose(fout_46);
fclose(fout_47);
fclose(fout_48);
fclose(fout_49);
fclose(fin);
/**** Lecture fichier par fichier ****/
fprintf(stdout,"\n\tLecture OK. Travail par bande d'altitude\n");
fflush(stdout);
npt_tot = npt_lat * npt_lon;
BR = (double **)malloc(npt_tot*sizeof(double*));
BT = (double **)malloc(npt_tot*sizeof(double*));
BP = (double **)malloc(npt_tot*sizeof(double*));
alt_var = (double **)malloc(npt_tot*sizeof(double*));
for (i = 0; i < npt_tot; i++)
{
BR[i] = (double *)malloc(NMAX*sizeof(double));
BT[i] = (double *)malloc(NMAX*sizeof(double));
BP[i] = (double *)malloc(NMAX*sizeof(double));
alt_var[i] = (double *)malloc(NMAX*sizeof(double));
}
if (choix == 1)
{
BR_med = (double *)malloc(npt_tot*sizeof(double));
BT_med = (double *)malloc(npt_tot*sizeof(double));
BP_med = (double *)malloc(npt_tot*sizeof(double));
}
else if (choix == 2)
{
BR_moy = (double *)malloc(npt_tot*sizeof(double));
BT_moy = (double *)malloc(npt_tot*sizeof(double));
BP_moy = (double *)malloc(npt_tot*sizeof(double));
}
else if (choix == 3)
{
BR_min = (double *)malloc(npt_tot*sizeof(double));
BT_min = (double *)malloc(npt_tot*sizeof(double));
BP_min = (double *)malloc(npt_tot*sizeof(double));
}
else if (choix == 4)
{
BR_max = (double *)malloc(npt_tot*sizeof(double));
BT_max = (double *)malloc(npt_tot*sizeof(double));
BP_max = (double *)malloc(npt_tot*sizeof(double));
}
BR_std = (double *)malloc(npt_tot*sizeof(double));
BT_std = (double *)malloc(npt_tot*sizeof(double));
BP_std = (double *)malloc(npt_tot*sizeof(double));
NPT = (int *)malloc(npt_tot*sizeof(int*));
BR[0][0] = 0.;
for (A = 0; A < 50 ; A ++)
{
fprintf(stdout, "\t\tAltitude = %lf\n", (double)(A * inc_alt) + alt_min);
sprintf(str, "temp_%02d.alt", A);
fin = fopen(str, "r");
for (i = 0 ; i < npt_tot ; i ++)
{
NPT[i] = 0;
}
while (!feof(fin))
{
d = fscanf(fin, READl, LECTl2);
if (d == 7)
{
l = (lat - lat_min) / inc_lat;
if (lon_max > lon_min)
{
L = (int)((lon - lon_min ) / inc_lon);
}
else
{
if (lon >= lon_min)
{
L = (int)((lon - lon_min ) /inc_lon);
}
else
{
L = (int)((lon + 360. - lon_min ) /inc_lon);
}
}
index = l * npt_lon + L;
for (i = 0 ; i < NPT[index]; i++)
{
if (br < BR[index][i])
{
temp = BR[index][i];
/* j = i; */
/* fprintf(stdout," %d\n",j);fflush(stdout); */
BR[index][i] = br;
br = temp;
for (j = i+1 ; j < NPT[index]; j++)
{
temp = BR[index][j];
BR[index][j] = br;
br = temp;
}
break;
}
}
BR[index][NPT[index]] = br;
for (i = 0 ; i < NPT[index]; i++)
{
if (bt < BT[index][i])
{
temp = BT[index][i];
BT[index][i] = bt;
bt = temp;
for (j = i+1 ; j < NPT[index]; j++)
{
temp = BT[index][j];
BT[index][j] = bt;
bt = temp;
}
break;
}
}
BT[index][NPT[index]] = bt;
for (i = 0 ; i < NPT[index]; i++)
{
if (bp < BP[index][i])
{
temp = BP[index][i];
BP[index][i] = bp;
bp = temp;
for (j = i+1 ; j < NPT[index]; j++)
{
temp = BP[index][j];
BP[index][j] = bp;
bp = temp;
}
break;
}
}
BP[index][NPT[index]] = bp;
alt_var[index][NPT[index]] = alt;
NPT[index] += 1;
/* fprintf(stdout, "Case %d, %d points lus\n", index, NPT[index]);fflush(stdout); */
}
}
fclose(fin);
if (choix == 1)
{
for (l = 0 ; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 0)
{
/* for (k = 0 ; k < NPT[index]; k++) */
/* { */
/* fprintf(stdout, "%3d %8.3lf %8.3lf %8.3lf\n", k,BR[index][k],BT[index][k],BP[index][k]);fflush(stdout); */
/* } */
if (NPT[index] == 1)
{
BR_med[index]=BR[index][NPT[index]-1];
BT_med[index]=BT[index][NPT[index]-1];
BP_med[index]=BP[index][NPT[index]-1];
}
else if ( NPT[index]%2 == 0)
{
BR_med[index]=(BR[index][NPT[index]/2-1]+BR[index][NPT[index]/2])/2.;
BT_med[index]=(BT[index][NPT[index]/2-1]+BT[index][NPT[index]/2])/2.;
BP_med[index]=(BP[index][NPT[index]/2-1]+BP[index][NPT[index]/2])/2.;
}
else if ( NPT[index]%2 != 0)
{
BR_med[index]=BR[index][(NPT[index]-1)/2];
BT_med[index]=BT[index][(NPT[index]-1)/2];
BP_med[index]=BP[index][(NPT[index]-1)/2];
}
std_br = std_bt = std_bp = 0;
for (k = 0; k < NPT[index] ; k ++)
{
dif_br = (BR[index][k] - BR_med[index]);
std_br += dif_br*dif_br;
dif_bt = (BT[index][k] - BT_med[index]);
std_bt += dif_bt*dif_bt;
dif_bp = (BP[index][k] - BP_med[index]);
std_bp += dif_bp*dif_bp;
}
if (NPT[index] > 2)
{
BR_std[index] = sqrt(std_br/(NPT[index]-1));
BT_std[index] = sqrt(std_bt/(NPT[index]-1));
BP_std[index] = sqrt(std_bp/(NPT[index]-1));
}
else
{
BR_std[index] = 3.;
BT_std[index] = 3.;
BP_std[index] = 3.;
}
lat = lat_min + (double)l*inc_lat + inc_lat/2.;
lon = lon_min + (double)L*inc_lon + inc_lon/2.;
alt = alt_min + (double)A*inc_alt + inc_alt/2.;
fprintf(fout, WRITE_bin, dday, lon, lat, alt,
BR_med[index], BT_med[index], BP_med[index],
NPT[index],
BR_std[index], BT_std[index], BP_std[index]);
}
}
}
}
else if (choix == 2)
{
for (l = 0 ; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 0)
{
sum_br = sum_bt = sum_bp = 0.;
for (k = 0; k < NPT[index] ; k ++)
{
sum_br += BR[index][k];
sum_bt += BT[index][k];
sum_bp += BP[index][k];
}
BR_moy[index] = sum_br / (double)NPT[index];
BT_moy[index] = sum_bt / (double)NPT[index];
BP_moy[index] = sum_bp / (double)NPT[index];
std_br = std_bt = std_bp = 0;
for (k = 0; k < NPT[index] ; k ++)
{
dif_br = (BR[index][i] - BR_moy[index]);
std_br += dif_br*dif_br;
dif_bt = (BT[index][i] - BT_moy[index]);
std_bt += dif_bt*dif_bt;
dif_bp = (BP[index][i] - BP_moy[index]);
std_bp += dif_bp*dif_bp;
}
if (NPT[index] > 2)
{
BR_std[index] = sqrt(std_br/(NPT[index]-1));
BT_std[index] = sqrt(std_bt/(NPT[index]-1));
BP_std[index] = sqrt(std_bp/(NPT[index]-1));
}
else
{
BR_std[index] = 3.;
BT_std[index] = 3.;
BP_std[index] = 3.;
}
lat = lat_min + (double)l*inc_lat + inc_lat/2.;
lon = lon_min + (double)L*inc_lon + inc_lon/2.;
if (lon >= 360.)
lon -= 360.;
alt = alt_min + (double)A*inc_alt + inc_alt/2.;
fprintf(fout, WRITE_bin, dday, lon, lat, alt,
BR_moy[index], BT_moy[index], BP_moy[index],
NPT[index],
BR_std[index], BT_std[index], BP_std[index]);
}
}
}
}
else if (choix == 3)
{
for (l = 0 ; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 0)
{
BR_min[index] = BR[index][0];
BT_min[index] = BT[index][0];
BP_min[index] = BP[index][0];
std_br = std_bt = std_bp = 0;
for (k = 0; k < NPT[index] ; k ++)
{
dif_br = (BR[index][i] - BR_min[index]);
std_br += dif_br*dif_br;
dif_bt = (BT[index][i] - BT_min[index]);
std_bt += dif_bt*dif_bt;
dif_bp = (BP[index][i] - BP_min[index]);
std_bp += dif_bp*dif_bp;
}
if (NPT[index] > 2)
{
BR_std[index] = sqrt(std_br/(NPT[index]-1));
BT_std[index] = sqrt(std_bt/(NPT[index]-1));
BP_std[index] = sqrt(std_bp/(NPT[index]-1));
}
else
{
BR_std[index] = 3.;
BT_std[index] = 3.;
BP_std[index] = 3.;
}
lat = lat_min + (double)l*inc_lat + inc_lat/2.;
lon = lon_min + (double)L*inc_lon + inc_lon/2.;
if (lon >= 360.)
lon -= 360.;
alt = alt_min + (double)A*inc_alt + inc_alt/2.;
fprintf(fout, WRITE_bin, dday, lon, lat, alt,
BR_min[index], BT_min[index], BP_min[index],
NPT[index],
BR_std[index], BT_std[index], BP_std[index]);
}
}
}
}
else if (choix == 4)
{
for (l = 0 ; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 0)
{
BR_max[index] = BR[index][NPT[index]-1];
BT_max[index] = BT[index][NPT[index]-1];
BP_max[index] = BP[index][NPT[index]-1];
std_br = std_bt = std_bp = 0;
for (k = 0; k < NPT[index] ; k ++)
{
dif_br = (BR[index][i] - BR_max[index]);
std_br += dif_br*dif_br;
dif_bt = (BT[index][i] - BT_max[index]);
std_bt += dif_bt*dif_bt;
dif_bp = (BP[index][i] - BP_max[index]);
std_bp += dif_bp*dif_bp;
}
if (NPT[index] > 2)
{
BR_std[index] = sqrt(std_br/(NPT[index]-1));
BT_std[index] = sqrt(std_bt/(NPT[index]-1));
BP_std[index] = sqrt(std_bp/(NPT[index]-1));
}
else
{
BR_std[index] = 3.;
BT_std[index] = 3.;
BP_std[index] = 3.;
}
lat = lat_min + (double)l*inc_lat + inc_lat/2.;
lon = lon_min + (double)L*inc_lon + inc_lon/2.;
if (lon >= 360.)
lon -= 360.;
alt = alt_min + (double)A*inc_alt + inc_alt/2.;
fprintf(fout, WRITE_bin, dday, lon, lat, alt,
BR_max[index], BT_max[index], BP_max[index],
NPT[index],
BR_std[index], BT_std[index], BP_std[index]);
}
}
}
}
for (l = 0; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 0)
{
filled_bin ++;
if (NPT[index] > 2)
{
filled_bin2 ++;
}
if (NPT[index] > 1)
{
filled_bin1 ++;
}
}
}
}
for (l = 0; l < npt_lat; l++)
{
for (L = 0 ; L < npt_lon ; L++)
{
index = l * npt_lon + L;
if (NPT[index] > 1)
{
lat = lat_min + (double)l*inc_lat + inc_lat/2.;
lon = lon_min + (double)L*inc_lon + inc_lon/2.;
if (lon >= 360.)
lon -= 360.;
fprintf(fout, "%7.3lf %7.3lf", lon, lat);
for (i=0;i<NPT[index]; i++)
{
fprintf(fout, " %7.3lf", alt_var[index][i]);
}
fprintf(fout, "\n");
}
}
}
}
fclose(fout);
fprintf(stdout, "\tNombre de donnees lues : %10d\n", data_in);
fprintf(stdout, "\tNombre de donnees utilisees : %10d\n", data_out);
fprintf(stdout, "\tNombre de bin remplis : %10d\n", filled_bin);
fprintf(stdout, "\tNombre de bin remplis (N>1) : %10d\n", filled_bin1);
fprintf(stdout, "\tNombre de bin remplis (N>2) : %10d\n", filled_bin2);
}
Hors ligne