Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/05/2007, à 14:18

laroche1

probleme fichier de sortie

Bonjour, voila j'ai un souci dans mon code en c
Normalement je devrais avoir un tableau de valeur or je n'ai qu'une ligne , est ce que quelqu'un pourrait m'aider ? (le code n'est pas à moi en plus)
merci

/************************************************************************/
/* correlation.c                                                        */
/*                                                                      */
/************************************************************************/

/***********************/
/****    includes    ***/
/***********************/

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

#define READ "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf\n"
/***************************************/
/****    a posteriori evaluation    ****/
/***************************************/

int main(argc, argv)
int argc;
char *argv[];
      {
        FILE   *fin,*fout;
       	double cor2_os, cor2_oo, cor2_ss;
	double cor4_os, cor4_oo, cor4_ss;
       	double cor6_os, cor6_oo, cor6_ss;

	double cor1_oo, cor1_ss;
	double cor3_oo, cor3_ss;
	double cor5_oo, cor5_ss;
	double cor1,cor2,cor3;
	double n;
	double obs_br, obs_bt,obs_bp,syn_br,syn_bt,syn_bp;
	double std1, std2,std3,std4,std5,std6, ecart_br,ecart_bt,ecart_bp;
	double min, max;
	/****    Introduction    ****/

/* 	printf("####################################################\n\n"); */
/* 	printf("correlation\n"); */
/* 	printf("Compute correlation coefficients between real and synthetic data\n"); */

	if (argc != 3 && argc != 5)
	  {
	    printf("\t2 or 4 parameters must be defined! Type\n");
	    printf("\tcorrelation.exe <fin> <fout> (<min> <max>)\n");
	    exit(-1);
	  }

	/****    Initialisation    ****/
	ecart_br  = 0.;
	ecart_bt = 0.;
	ecart_bp = 0.;
	std1   = 0.;
	std2   = 0.;
	std3   = 0.;
	std4   = 0.;
	std5   = 0.;
	std6   = 0.;
	cor2_os = cor2_oo = cor2_ss = 0.;
	cor4_os = cor4_oo = cor4_ss = 0.;
	cor6_os = cor6_oo = cor6_ss = 0.;
	cor1_oo = cor1_ss           = 0.;
	cor3_oo = cor3_ss           = 0.;
	cor5_oo = cor5_ss           = 0.;
	n      = 0.;

	/****    ouverture des fichiers    ****/

	fin = fopen(argv[1], "r");
	if (fin == NULL)
	  {
	    printf("\tReading error on input file <%s>\n", argv[1]);
	    printf("\tPlease check. xit!\n");
	    exit(-1);
	  }

	fout = fopen(argv[2], "a");
	if (fout == NULL)
	  {
	    printf("\twritinging error on input file <%s>\n", argv[2]);
	    printf("\tPlease check. xit!\n");
	    exit(-1);
	  }
	

	if (argc == 5)
	  {
	    min = atof(argv[3]);
	    max = atof(argv[4]);
	    if (min > max) 
	      {
		printf("La selection est erronee (min > max). Sortie.\n");
		fclose(fin);
		exit(-1);
	      }
	  }
	else 
	  {
	    min = 1.99;
	    max = 1.99;
	  }

	while (!feof(fin))
	  {
	    fscanf(fin, "%lf %lf %lf %lf %lf %lf\n", &obs_br,&obs_bt,&obs_bp, &syn_br,&syn_bt, &syn_bp);
	    if (min == max && min == 1.99)
	      {
		n += 1.;

		ecart_br   = obs_br - syn_br;
		std1   += ecart_br;
		std2   += ecart_br * ecart_br;
		
		ecart_bt = obs_bt - syn_bt;
		std3 += ecart_bt;
		std4 += ecart_bt;

		ecart_bp = obs_bp - syn_bp;
		std5 += ecart_bp;
		std6 += ecart_bp;


		  cor2_os += obs_br*syn_br;
		    cor1_ss += syn_br;
		    cor1_oo += obs_br;
		    cor2_oo += obs_br*obs_br;
		    cor2_ss += syn_br*syn_br;

			cor4_os += obs_bt*syn_bt;
		    cor3_ss += syn_bt;
		    cor3_oo += obs_bt;
		    cor4_oo += obs_bt*obs_bt;
		    cor4_ss += syn_bt*syn_bt;

			cor6_os += obs_bp*syn_bp;
		    cor5_ss += syn_bp;
		    cor5_oo += obs_bp;
		    cor6_oo += obs_bp*obs_bp;
		    cor6_ss += syn_bp*syn_bp;
	      }
	    else
	      {
		if (obs_br >= min && syn_br >= min && obs_br <= max && syn_br <= max && obs_bt >= min && syn_bt >= min && obs_bt <= max && syn_bt <= max && obs_bp >= min && syn_bp >= min && obs_bp <= max && syn_bp <= max)
		  {
		    n += 1.;
		    
		ecart_br   = obs_br - syn_br;
		std1   += ecart_br;
		std2   += ecart_br * ecart_br;
		
		ecart_bt = obs_bt - syn_bt;
		std3 += ecart_bt;
		std4 += ecart_bt;

		ecart_bp = obs_bp - syn_bp;
		std5 += ecart_bp;
		std6 += ecart_bp;

		    cor2_os += obs_br*syn_br;
		    cor1_ss += syn_br;
		    cor1_oo += obs_br;
		    cor2_oo += obs_br*obs_br;
		    cor2_ss += syn_br*syn_br;

			cor4_os += obs_bt*syn_bt;
		    cor3_ss += syn_bt;
		    cor3_oo += obs_bt;
		    cor4_oo += obs_bt*obs_bt;
		    cor4_ss += syn_bt*syn_bt;

			cor6_os += obs_bp*syn_bp;
		    cor5_ss += syn_bp;
		    cor5_oo += obs_bp;
		    cor6_oo += obs_bp*obs_bp;
		    cor6_ss += syn_bp*syn_bp;

		  }
	      }
	  }

	/****    Fermeture des fichiers    ****/

/* 	printf("Lecture OK!\n\n"); */
	fclose(fin);
	
	/****    Correlations finales    ****/

	cor1 = (n * cor2_ss - cor1_ss*cor1_ss) *
	  (n * cor2_oo - cor1_oo*cor1_oo);
	cor1 = (n * cor2_os - cor1_ss*cor1_oo) /
	  sqrt(cor1);

	cor2 = (n * cor4_ss - cor3_ss*cor3_ss) *
	  (n * cor4_oo - cor3_oo*cor3_oo);
	cor2 = (n * cor4_os - cor3_ss*cor3_oo) /
	  sqrt(cor2);

	cor3 = (n * cor6_ss - cor5_ss*cor5_ss) *
	  (n * cor6_oo - cor5_oo*cor5_oo);
	cor3 = (n * cor6_os - cor5_ss*cor5_oo) /
	  sqrt(cor3);

	fprintf(fout,"%5d %lf %lf %lf %lf %lf %lf\n", (int)n, sqrt(std2/n), sqrt(std4/n), sqrt(std6/n),cor1,cor2,cor3);

/* 	printf("\tNombre de donnees retenues pour la correlation : %d\n", (int)n); */
/* 	printf("\tEcart quadratique moyen : %lf\n", sqrt(std2/n)); */
/* 	printf("\tCorrelation             : %lf\n", cor); */
  }

et le fichier test  (pouur fin)
51  16  73  47  25  71
41  85  62  38  90  64
75  12  65  73  15  63
-15  85  36 -16  88  38
0  65  87  -1  67  89
12 -85 -96  10 -80 -94
14  85  30  13  92  32
-6  42  32 -10  43  30
17  45   9  15  46  11
27  62  15  24  63  13

Hors ligne

#2 Le 11/05/2007, à 14:33

best_friend_fr

Re : probleme fichier de sortie

Salut

D'après le code, il est normal que tu n'obtiennes qu'une ligne. Ton code scanne tout le fichier, puis effectue des calculs sur le résultat puis imprime le résultat des calculs.

Le fprints est en dehors du while. Il n'est donc effectué qu'une fois.


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#3 Le 11/05/2007, à 14:55

laroche1

Re : probleme fichier de sortie

Bonjour bestfriend
alors je dois que mettre le fprint dans la boucle while? , je ne dois pas faire une boucle de for sur n ?

remercie

Dernière modification par laroche1 (Le 11/05/2007, à 14:59)

Hors ligne