Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas com exercício de estrutura em C.


Murilo Oliveira

Pergunta

Boa tarde pessoal do Fórum Script Brasil!

Meu nome é Murilo, sou do interior de São Paulo. A breve apresentação é só pelo fato de se tratar do meu primeiro post aqui no site. :P

Curso o primeiro ano de Engenharia de Computação.

Estou com uma dificuldade com um certo exercício que envolve vetores de estrutura.

O exercício pede o seguinte:

1ºCriar uma estrutura para receber Nomes de clubes de futebol e seus pontos. São 20 clubes no total.

2ºAtribuir os respectivos nomes e valores dos pontos e ver quais os dois times que possuem o menor número de pontos, imprimindo o nome desses.

Até aí tudo ok...

Exceto o fato de que, o meu programa consegue saber quais são os dois menores números no campo pontos, porém não achei uma forma de relacionar isso com os nomes dos clubes.

Alguém ?

Não sei ainda se posso postar o código ou parte dele aqui no site, mas se puder eu posto pra explicar melhor.

Obrigado por enquanto, a primeira impressão é de que esse é um ótimo fórum!

:)

Abraço a todos.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Parabéns pela coragem. Eu me formei em engenharia da computação e sei como é difícil! Boa sorte e acredite sempre que você chega lá... :)

Quanto ao código: pode postar sim! De preferência entre as tags [ code ] e [ /code ] sem os espaços nos colchetes!

Para associar você realmente precisa de uma estrutura. Você sabe como declarar?

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado pela força, Marcelo! E pela atenção.

Já estou vendo que a coisa não vai ser mesmo nada fácil!

Mas com calma e um pouco da ajuda de vocês, chegamos lá!

:)

Vamos ao 'problema'...

Segue o código até onde o tenho

#include <stdio.h>
#include <conio.h>

main()
{     
     int i;
     int menor1, menor2;
     
     struct time
     {
         char nome[20];
         int pontos;
     };
     
     struct time vet[20];
     
     for(i=0;i<5;i++)
     {
         printf("Entre com o nome pra o primeiro time %d\n",i+1);
         scanf("%s", &vet[i].nome);
         printf("Entre com os pontos.\n");
         scanf("%d", &vet[i].pontos);
     }
     
     menor1 = vet[0].pontos;
     menor2 = vet[0].pontos;
     
     for(i=0;i<5;i++)
     {
         if(vet[i].pontos<menor1)
             menor1 = vet[i].pontos;
         else
            vet[i].pontos = vet[i].pontos;
     }
     
     for(i=0;i<5;i++)
     {
         if(vet[i].pontos<menor2 && vet[i].pontos>menor1)
             menor2 = vet[i].pontos;
         else
            vet[i].pontos = vet[i].pontos;
     }
     
     for(i=0;i<5;i++)
     {
         printf("Time um e : %s\n", vet[i].nome);
         printf("Tem %d pontos\n", vet[i].pontos);
     }
     
     printf("Menor 'pontos' : %d\n", menor1);
     printf("Menor 'pontos2' : %d\n", menor2);
     
     printf("Times rebaixados\n");

     .
     .
     .
        
     getch();
}

Nota-se que nesse caso seriam apenas 5 clubes, já que pra atribuir valor pra 20 demora um bocado! :P

Criei essas variáveis (menor1 e menor2) pra que eu encontrasse os dois menores campo pontos.

O exercício pede pra que eu imprima os nomes dos times que tem esses respectivos pontos, aí o problema!

Por exemplo:

Time 1 - 20 Pontos

Time 2 - 30 pontos

Time 3 - 25 pontos

...

eu consigo encontrar 20 e 25, que são os menores pro campo pontos, mas não sei relacionar com Time 1 e Time 2.

Não ficando claro me avisem que eu tento explicar melhor.

:)

Abraços e obrigado de novo!

Link para o comentário
Compartilhar em outros sites

  • 0

Você está corretíssimo, cinco já dá para testar o algoritmo! :)

Seguem meus comentários:

1) No seu caso você poderia salvar não o número de pontos em menor1 e menor2 mas sim o índice (contador i). Assim você teria acesso aos pontos da mesma forma e também o nome do time. Assim o código para exibir os times rebaixados seria:

printf("Primeiro time rebaixado: %s com %d pontos\n", vet[menor1].nome, vet[menor1].pontos);
printf("Segundo time rebaixado: %s com %d pontos\n", vet[menor2].nome, vet[menor2].pontos);
2) O else é opcional. Se não for necessário não precisa usar! Eu vi no código que você atribui a variável a ela mesma em campos else, algo desnecessário. 3) A lógica de busca eu deixaria da seguinte forma:
menor1 = 0;

     for(i=0;i<5;i++)
     {
         if(vet[i].pontos<vet[menor1].pontos)
             menor1 = i;
     }

// Não permite que menor1 e menor2 repitam
     if(!menor1)
         menor2 = 1;
     else
         menor2 = 0;

     for(i=0;i<5;i++)
     {
                 // verifica se é o time escolhido em menor1 para não repetir
         if(vet[i].pontos<vet[menor2].pontos && i!=menor1)
             menor2 = i;
     }

4) Outra coisa: a palavra time pode parecer tempo em inglês e dependendo até gerar algum conflito, dependendo das funções que você estiver usando. Use outro nome como equipe, por exemplo.

Consegui explicar? :)

Editado por Marcelo Utikawa da Fonseca
Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado, Marcelo!

Conseguiu explicar sim.

:)

Armazenando da forma como sugeriu funciona pro que eu quero.

Quanto aos else's desnecessários, já ouvi isso antes, mania que prometo deixar de lado! :P

Entendi os seus códigos. :)

E também tem razão quanto a nomenclatura das funções, podem mesmo confundir.

Bom, no geral é isso.

Agradeço pela ajuda.

Estudarei mais e espero voltar com mais dúvidas! :P

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...