Ir ao conteúdo

Posts recomendados

Postado

Tenho que fazer leituras de linhas e no fim imprimir um determinado valor predominante ( o que mais apareceu e não uma média). No exemplo abaixo, o valor predominante é o 5, então, no fim do processo, eu deveria imprimir algo como: "O número 5 é o predominante!". Como posso fazer isso?

 

 

 

 

20190101;0000;23.2;89;1011.5;9;3.3
20190101;1200;26.8;88;1011.8;5;3.3
20190101;1800;29.2;79;1010.2;5;3.3
20190102;0000;27.2;83;1009.5;5;3.3
20190102;1200;28.2;84;1007.5;5;0.7
20190102;1800;39.4;47;1002.2;32;3.6
20190103;0000;26.3;96;1003.5;5;1.3
20190103;1200;22.8;95;1005.2;32;0.7
 

  • Obrigado 1
Postado

@Hiago Martins      você já fez o código para saber qual o número predominante  ?  

pois para imprimir seria simples com printf , você pode usar um matriz que receberá cada número encontrado nessa posição da lista , e se o número já estiver na matriz você incrementa a segunda coluna da matriz , e se o número não estiver na matriz você coloca tal número na matriz em uma posição que esteja vaga e coloca o valor 1 na segunda coluna da matriz informando que encontrou esse número uma vez e se encontrar esse mesmo número novamente então incrementa esse valor da segunda coluna , indo assim até o final , depois verifica o maior valor na segunda coluna qual é o maior e na primeira coluna é o número predominante . exemplo  :

int matriz[1000][2];//antes da main


//ler o valor naquela psição da lista 
int valor;
fscanf("%d",&valor);//naquela posição

//procurar na matriz toda se tal número já está armazenado nela
flag=0;
for(f=0;f<1000;f++){
    if(valor == matriz[f][0]){
        flag=1;
        break;
    }
}

//se estiver então incrementa a quantidade 
if( flag )matriz[f][1]++;
//senão coloca o número na matriz
else 
    for(f=0;f<10000;f++)
        if(matriz[f][0]==0){
            matriz[f][0] = valor;
            break;
        }

//ver qual apareceu mais vezes
int pos,psq;
psq = matriz[0][1];
for(f=0; f<1000; f++)
    if( psq < matriz[f][1]){
        psq = matriz[f][1];
        pos = f;
    }

//imprimir o número predominante
printf("O Numero Predominante eh o %d e Saiu %d Vezes !\n\n",
       matriz[pos][0],matriz[pos][1]);

 

Postado

@devair1010 muito obrigado!! de novo 😅

Meu código ficou assim, só falta terminar o que minha tarefa me pede.

#include <stdio.h>

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, media;

int conta_linha( char arq [50] ){
	
	FILE*entrada = fopen(arq, "r");
	
	int y;
	int conta = -1;
	char aux[50];
	
	fgets(aux, 50, entrada);
	
	while(!feof(entrada)){
		
		fgets(aux, 50, entrada);
		
		for(y=0; y<50; y++){		
				
			if(aux[y] == '\n') conta ++;	
		}
	}
	fclose(entrada);
	return conta;
	
}

int x = 1;
int i, final, teste, l_total;
char nome_in[50];
int pred[100][2];
FILE*entrada;
FILE*saida;


int main(){
	
	scanf("%s", &nome_in);
	
	entrada = fopen(nome_in, "r");
	saida = fopen("mediahora.csv", "w");
	
	l_total = conta_linha(nome_in);
	
	while(final <= l_total){
		
		fscanf(entrada, "%ld;%d;%f;%d;%f;%d;%f \n", &lin.data, &lin.hora, &lin.temp, &lin.umid,
													&lin.press, &lin.dir, &lin.vel);															
		if(lin.hora == 0){
			
			for(i = 0; i<1000; i++){
				
				teste = 0; 
				if(pred[i][0] == lin.dir) {
					
					teste++;
					break;
				}			
			}
			
			
			if(teste) pred[i][1]++; 
			
			else{
				
				for(i = 0; i<1000; i++){
					
					if(pred[i][0] == 0){
						
						pred[i][0] = lin.dir;
						pred[i][1] = 1;
						break;
					}
				}	
			}
		}
		
		final++;
	}
	
	int pos;
	int inicial = pred[0][1];

	for(i = 0; i<100; i++){
		
		if(pred[i][1]>inicial){
			
			inicial = pred[i][1];
			pos = i;			
		}		
	}
	
	printf("O numero %d apareceu %d vezes!\n", pred[pos][0], inicial);
	
	fclose(entrada);
	fclose(saida);
	
	return 0;
	
}

 

  • Curtir 1

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!