Ir ao conteúdo
  • Cadastre-se

C Programa em C - valores iguais de um vetor


TRenan

Posts recomendados

A ideia é que dada a entrada de nomes (competidores) e suas notas, o programa entregue qual é  o nome do competidor com a maior nota e também listar, se for o caso, os nomes que têm a mesma nota. Alguém poderia apontar os defeitos do código abaixo e dar uma ideia sobre a resolução do problema ?

 

#include <stdio.h>
#include <string.h>

int main(){
    int i, j, w, cont=0;
    float nota[5], win=0;
    char nome[5][60];
    
    for( i=0 ; i<5 ; i++ ) {        //entrada de nomes e notas
        printf("Digite o nome do %dº competidor: ",i+1);
        scanf("%s", &nome[i]);
        printf("Agora digite a nota do %dº competidor: ",i+1);
        scanf("%f", &nota[i]);
        if( nota[i]>10 || nota[i]<0 ) {           //nota invalida
            while( nota[i]>10 || nota[i]<0 ) {
            printf("Nota inválida!!!\n=== Notas válidas entre zero(0) e dez(10)!! ===\nDigite novamente a nota do %dº competidor: ",i+1);
            scanf("%f",&nota[i]);
            }
            
        }
    }

    for(i=0;i<5;i++){           //verifica a maior nota, porém não considera notas iguais
        if(nota[i]>win){
            win=nota[i];
            w=i;
        }
    }
    for(i=0;i<5;i++){                  //teste p/ verificar as comparações
        for(j=i+1;j<5;j++){
            if(nota[i]==nota[j]){
                cont++;
                printf("%.0f %.0f=========>> %d = i e %d=j\n",nota[i],nota[j],i,j);//valida
            }
            else
            printf("%.0f %.0f // %d = i e %d=j\n",nota[i],nota[j],i,j);      //não valida
        }
    }
    
    printf("=== O Competidor com a Maior Nota foi %s ===\n",nome[w]);
    
    
    
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Dei uma olhada aqui

#include <stdio.h>
#include <string.h>


int main()
{
  int i, j, w, cont=0;
  float nota[5], win=0;
  char nome[5][60];
  for( i=0 ; i<5 ; i++ ) 
  {        //entrada de nomes e notas
    printf("Digite o nome do %dº competidor: ",i+1);
    /*scanf("%s", &nome[i]);*//* Isso já e um ponteiro então a dereferência e desnecessaria, assim você está passando o ponteiro do ponteiro. */
    /*scanf("%s", nome[i]);   Jeito certo, só pega uma quantidade limitada de caracteres sem espaço */
    /* Usar fgets e a melhor opção para pegar caracteres, mas não e a unica */
    fgets(/* Passa a variavel */nome[i],/* Quantidade de caracteres */60,/* Entrada padrão "stdin" */stdin);
    /* não e necessario usar getchar com fgets */
    /*getchar();*/  /* Com getchar você tira o NewLine do buffer de teclado. */
    printf("Agora digite a nota do %dº competidor: ",i+1);
    scanf("%f", &nota[i]);
    getchar();
    if( nota[i]>10 || nota[i]<0 ) 
    {           //nota invalida
      while( nota[i]>10 || nota[i]<0 ) 
      {
        printf("Nota inválida!!!\n=== Notas válidas entre zero(0) e dez(10)!! ===\nDigite novamente a nota do %dº competidor: ",i+1);
        scanf("%f",&nota[i]);  
        getchar();
      }
    }
  }
  for(i=0;i<5;i++)
  {           //verifica a maior nota, porém não considera notas iguais
    if(nota[i]>win)
    {
      win=nota[i];
      w=i;
    }
  }
  for(i=0;i<5;i++)
  {                  //teste p/ verificar as comparações
    for(j=i+1;j<5;j++)
    {
      if(nota[i]==nota[j])
      {
        cont++;
        printf("%.0f %.0f=========>> %d = i e %d=j\n",nota[i],nota[j],i,j);//valida
      }
      else
        printf("%.0f %.0f // %d = i e %d=j\n",nota[i],nota[j],i,j);      //não valida
    }
  }

  printf("=== O Competidor com a Maior Nota foi %s ===\n",nome[w]);
  getchar();
  return 0;
}

Olhe os comentários.

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