Ir ao conteúdo
  • Cadastre-se

C Erro na lógica de um programa


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

@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;

}

 

 

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!