Ir ao conteúdo
  • Cadastre-se
TRenan

C Programa em C - valores iguais de um vetor

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

 

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!