Ir ao conteúdo

Posts recomendados

Postado

O código abaixo deveria ler linhas de um arquivo de dados e caso as datas das linhas fossem iguais ele deveria fazer uma media dos seus valores, só que não está funcionando.

Ele está fazendo apenas a média das duas primeiras linhas e ignorando o resto.

 

Alguém conseguiria me dar um caminho?

 

exemplos de linhas a serem lidas:

 

20190101;0000;23.2;89;1011.5;9;3.3
20190101;1800;28.2;44;1012.0;23;3.5

//Faria uma media para o dia 01/01
20190102;0000;21.0;79;1012.2;36;2.0
20190102;1200;23.2;89;1011.5;9;3.3
20190102;1800;28.3;44;1012.0;23;3.5

//Faria uma media para o dia 02/01
20190103;0000;24.4;79;1012.2;36;2.0

//Faria uma média para o dia 03/01

#include <stdio.h>

int x = 0;
	
struct {
	
	long data = 0;
	float temp = 0.0;
	float press = 0.0;
	float vel = 0.0;
	int hora = 0;
	int dir = 0;
	int umid = 0;
	
}lin, lin2, media;


int main(){

	FILE*entrada = fopen("teste.csv", "r");

	fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n", &lin.data, &lin.hora, &lin.temp, &lin.umid,
												&lin.press, &lin.dir, &lin.vel);	
											
						                                      
    while(!feof(entrada) ){
										    	
		if((lin.data == lin2.data) || (lin2.data == 0)){
			
		lin2.data = lin.data;
		lin2.temp = lin2.temp + lin.temp;
		lin2.press = lin2.press + lin.press;
		lin2.umid = lin2.umid + lin.umid;
											
			x++;
			
		}

		else{
			
			media.temp = lin2.temp/x;
			media.press = lin2.press/x;
			media.umid = lin2.umid/x;
				
			printf("%ld;%.1f;%d;%.1f \n", lin2.data, media.temp, media.umid, media.press );
			
			lin2.data = lin.data;
			lin2.temp = lin.temp;
			lin2.press = lin.press;
			lin2.umid =  lin.umid;
			
			media.data = media.temp = media.umid = media.press = 0;	
			x = 0;
		
		}
		
	fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n", &lin.data, &lin.hora, &lin.temp, &lin.umid,
												&lin.press, &lin.dir, &lin.vel);

	}

	fclose(entrada);
	
	return 0;
	
}


 

  • Curtir 1
Postado

@Hiago Martins @Hiago Martins    seu código poderia ser assim  :

#include <stdio.h>
#include <conio.h>

typedef struct{

	long  data          ;
	float temp,press,vel;
	int   hora,dir,umid ;

}dados;
dados lin[100];
dados lin2[100];
dados media[100];

float tmp,prs,vlc;
int dr,ud,j,i,x;

int main(){

    FILE*entrada = fopen("teste.csv", "r");
    while(fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n",
          &lin[x].data,&lin[x].hora,&lin[x].temp,&lin[x].umid,
          &lin[x].press, &lin[x].dir, &lin[x].vel) != EOF){

        lin2[x].temp  = lin[x].temp ;
        lin2[x].umid  = lin[x].umid ;
        lin2[x].press = lin[x].press;
        lin2[x].vel   = lin[x].vel  ;
        lin2[x].data  = lin[x].data ;

        printf("data  %ld \n",lin[x].data );
        printf("hora  %d  \n",lin[x].hora );
        printf("temp  %.2f\n",lin[x].temp );
        printf("umid  %d  \n",lin[x].umid );
        printf("press %.2f\n",lin[x].press);
        printf("dir   %d  \n",lin[x].dir  );
        printf("vel   %.2f\n\n",lin[x].vel);

        x++;
    }
    fclose(entrada);
    for(j=0;j<x-1;j++){
        tmp=0;
        prs=0;
        vlc=0;
        ud=0;
        int pi=0;
        for(i=j+1;i<x;i++){
		    if((lin2[j].data == lin2[i].data) && (lin2[i].data != 0)){

		        if(pi==0){
                    tmp += lin[j].temp ;
                    prs += lin[j].press;
                    vlc += lin[j].vel  ;
                    ud  += lin[j].umid ;
                    pi++;
		        }
                tmp += lin[i].temp ;
                prs += lin[i].press;
                vlc += lin[i].vel  ;
                ud  += lin[i].umid ;
                pi++;
                lin2[i].data=0;
		    }
        }
        printf("\n");
        if(tmp!=0 || prs !=0 || vlc !=0 || ud != 0){
            printf("Media para o dia -------> %ld\n\n",lin[j].data);
            printf("A temperatura media eh -> %.2f\n" ,tmp/pi     );
            printf("A Pressao media eh -----> %.2f\n" ,prs/pi     );
            printf("A velocidade media eh --> %.2f\n" ,vlc/pi     );
            printf("A umidade media eh -----> %d\n\n" ,ud /pi     );
        }
    }
	return 0;

}

 

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!