Ir ao conteúdo
  • Cadastre-se

C Imprimir dado o predominante


Posts recomendados

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

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

 

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!