Ir ao conteúdo

Posts recomendados

Postado

Bom dia pessoal, estou iniciando vetores em C, já fiz diversos exercícios para um melhor aprendizado, porém me deparei com um exercício que me falta experiência para sua resulução.

Segue o exercício:

"Em um campeonato de futebol existem x times e para cada tipo, existem y jogadores. Faça um programa que receba: o valor de x e de y, a idade, o peso e a altura de cada um dos jogadores, calcule e mostre:

a) a quantidade de jogadores com idade inferior a 18 anos; B) a média das idades dos jogadores de cada time; c) a média das alturas de todos os jogadores do campeonato; d) a percentagem de jogadores com mais de 80 Kg entre todos os jogadores do campeonato; e) a média de idade dos jogadores com peso acima de 100 Kg."

 

Parei na letra B, tirar a média de idade dos jogadores por de cada time, utilizei dois For  para isso, meu problema é que a quantidade de times e jogadores são fornecidas pelo usuario, e não consigo tirar a média, tentei da seguinte maneira media = media + idade ; Porém como está dentro do for não traz o valor real...

Conseguem me ajudar da resolução do mesmo?

Segue parte do código feito até agora:

 

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int qtdT=0,qtdJ=0,t,j,contidmenor=0;
    float mediaid[qtdJ],somaid[qtdJ],idade[qtdJ];

    mediaid[qtdJ] = 0;
    printf("Digite a Qtd de Times: ");
    scanf("%d", &qtdT);
    printf("Digite a Qtd de Jogadores: ");
    scanf("%d", &qtdJ);

    for (t=1;t<=qtdT;t++)
    {
        printf("\n\t***Time%i***\n",t);
        for(j=1;j<=qtdJ;j++)
        {
            printf("Digite a idade do jogador%d: ", j);
            scanf("%f", &idade[j]);
            if (idade[j]<18)
            {
                contidmenor++;
            }
            mediaid[j] = (mediaid[j] + idade[j])/qtdJ;
        }
    }
    printf("\nJogadores com idade inferior a 18 anos: %d\n",contidmenor);

        for(j=1;j<=qtdT;j++)
        {
            printf("Media Idade Time%i: %.2f\n",j,mediaid[j]);
        }
}

 

  • Membro VIP
Postado

@Intruder18

A soma das idades deve ser feita dentro do segundo FOR, após a entrada de dados. Senão você terá que fazer outro laço duplo somente para buscar dados.

A média das idades ficaria logo após o fechamento do segundo laço FOR (antes de fechar o primeiro). Ela ficaria da seguinte forma:

mediaid[t] = somaidJ/qtdJ;

Essa varipável somaidJ deverá receber 0 antes de ser reutilizada.

Eu usei mediaid[t] (e não J) pois eu guardarei a média do time todo. Precisarei do índice do time e não dos jogadores.

  • Curtir 1
Postado

      Boa noite, este exercícios longos de fixação que preguiça dar de responder... 

       

      Vamos lá, primeira coisa x, y ➠ x é o time, y é número de jogadores então

      Se x: 1 time e cade time tem y: 5 jogadores teremos: x:1,y:5  = {☻☻☻☻☻}, Total: 5☻

       e se x:3, y:5 temos:

        {☻☻☻☻☻},

        {☻☻☻☻☻},

        {☻☻☻☻☻}, Total: 15☻ mesmo que x vezes y, portanto uma MATRIZ aij( 3x5 ).

        Este foi um exemplo.

 

        Solucione com uma estrutura de repetição e um vetor  para cada característica, ao invés

de uma matriz:

  1. declare: games_idade[ x * y], games_altura[ x * y], games_peso[ x * y ], time_idade_media[ x ];
  2. uma variável para responder cada pergunta de a) ate e),
  3. uma estrutura for, e para cada pergunta uma declaração IF avaliando a condição. 

 

Escolha uma letra para ser respondida de exemplo? Se jugar necessário.

____________________________________

  • Curtir 1
Postado

Não sei, deu um bug na minha cabeça.

Se puder rode o programa, usei a lógica que você disse mas o valores trazem 0, nos dados inseridos pelo usuario coloquei 2 times e 2 jogadores, as idades fora 10 e 9 do time1 e 20 e 19 do time 2, ainda criei uma condição para testar a soma das idades, mas traz 0.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int qtdT=0,qtdJ=0,t,j,contidmenor=0,contid100=0;
    float mediaid[qtdJ],somaid[qtdJ],idade[qtdJ],altura[qtdJ];
    float alturatotal=0,mediaaltura=0,peso,contpeso=0,percpeso=0,pesototal,mediaid100=0,somaid100=0;

    somaid[qtdJ] = 0;
    mediaid[qtdJ] = 0;
    printf("Digite a Qtd de Times: ");
    scanf("%d", &qtdT);
    printf("Digite a Qtd de Jogadores: ");
    scanf("%d", &qtdJ);


    for (t=1;t<=qtdT;t++)
    {
        printf("\n\t***Time%i***\n",t);

        for(j=1;j<=qtdJ;j++)
        {
            //Digite a idade do Jogador
            printf("Digite a idade do jogador%d: ", j);
            scanf("%f", &idade[j]);

            if (idade[j]<18)
            {
                contidmenor++;
            }
            somaid[j] = somaid[j] + idade[j];
            mediaid[j] = somaid[j] /qtdJ;

           /*
            //Digite a altura do Jogador
            printf("Digite a altura do jogador%d: ", j);
            scanf("%f", &altura[j]);

            alturatotal = alturatotal + altura[j];

            //Digite o peso do jogador
            printf("Digite o peso do jogador: ", j);
            scanf("%f", &peso);

            if (peso < 80)
            {
                contpeso++;
            }
            if (peso > 100)
            {
                somaid100 = somaid100 + idade[j];
                contid100++;
            }
            */
        }
    }

    mediaaltura = alturatotal / (qtdT*qtdJ);
    percpeso = (contpeso /(qtdT * qtdJ))*100;
    mediaid100 = somaid100 / contid100;
    printf("\nJogadores com idade inferior a 18 anos: %d\n",contidmenor);




        for (j=1;j<=qtdT;j++)
        {
            printf("Soma idade time%d: %.1f\n",j,somaid);
        }

        for(j=1;j<=qtdT;j++)
        {

            printf("Media Idade Time%i: %.2f\n",j,mediaid[j]);
        }

        printf("Alturas de todos os jogadores do campeonato: %.2f\n", mediaaltura);
        printf("Percentagem de jogadores com mais de 80 Kg: %2.f%%\n", percpeso);
        printf("Média de idade dos jogadores com peso acima de 100 Kg: %.1", mediaid100);

 

adicionado 0 minutos depois

@Math.Pi

Não sei, deu um bug na minha cabeça.

Se puder rode o programa, usei a lógica que você disse mas o valores trazem 0, nos dados inseridos pelo usuario coloquei 2 times e 2 jogadores, as idades fora 10 e 9 do time1 e 20 e 19 do time 2, ainda criei uma condição para testar a soma das idades, mas traz 0.

 

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int qtdT=0,qtdJ=0,t,j,contidmenor=0,contid100=0;
    float mediaid[qtdJ],somaid[qtdJ],idade[qtdJ],altura[qtdJ];
    float alturatotal=0,mediaaltura=0,peso,contpeso=0,percpeso=0,pesototal,mediaid100=0,somaid100=0;

    somaid[qtdJ] = 0;
    mediaid[qtdJ] = 0;
    printf("Digite a Qtd de Times: ");
    scanf("%d", &qtdT);
    printf("Digite a Qtd de Jogadores: ");
    scanf("%d", &qtdJ);


    for (t=1;t<=qtdT;t++)
    {
        printf("\n\t***Time%i***\n",t);

        for(j=1;j<=qtdJ;j++)
        {
            //Digite a idade do Jogador
            printf("Digite a idade do jogador%d: ", j);
            scanf("%f", &idade[j]);

            if (idade[j]<18)
            {
                contidmenor++;
            }
            somaid[j] = somaid[j] + idade[j];
            mediaid[j] = somaid[j] /qtdJ;

           /*
            //Digite a altura do Jogador
            printf("Digite a altura do jogador%d: ", j);
            scanf("%f", &altura[j]);

            alturatotal = alturatotal + altura[j];

            //Digite o peso do jogador
            printf("Digite o peso do jogador: ", j);
            scanf("%f", &peso);

            if (peso < 80)
            {
                contpeso++;
            }
            if (peso > 100)
            {
                somaid100 = somaid100 + idade[j];
                contid100++;
            }
            */
        }
    }

    mediaaltura = alturatotal / (qtdT*qtdJ);
    percpeso = (contpeso /(qtdT * qtdJ))*100;
    mediaid100 = somaid100 / contid100;
    printf("\nJogadores com idade inferior a 18 anos: %d\n",contidmenor);




        for (j=1;j<=qtdT;j++)
        {
            printf("Soma idade time%d: %.1f\n",j,somaid);
        }

        for(j=1;j<=qtdT;j++)
        {

            printf("Media Idade Time%i: %.2f\n",j,mediaid[j]);
        }

        printf("Alturas de todos os jogadores do campeonato: %.2f\n", mediaaltura);
        printf("Percentagem de jogadores com mais de 80 Kg: %2.f%%\n", percpeso);
        printf("Média de idade dos jogadores com peso acima de 100 Kg: %.1", mediaid100);

 

Postado

      Observe e compare o fragmento abaixo:

/**
 * \author     Mauro Britivaldo
 * \date       23-Dez-2016
 * Linguagem:  C'11
 * Editor:     Code::Blocks 16.01 GNU GCC Compiler
 *
 * breve descrição.
 *
 */
//##################### Referências Bibliográficas ###########################//
#include <stdio.h>

  
int main( void )
{
    unsigned int x_times, y_jogadores, menor_de_idade;
    /**< Inteiro-sem sinal total de times(x), total de jogadores(y) por x. */
        x_times =  0,
        y_jogadores =  0,
        menor_de_idade = 0;

//< CAPTURANDO DO TECLADO OS VALORES DE X & Y
    printf( "Entre com x times, y jogadores por time (X Y): " );
    scanf( " %u%u", &x_times, &y_jogadores );
    /**< flags: %u quer dizer apenas inteiros positivos. */

//< VETORES DECLARADOS DEPOIS DE CAPTURAR OS VALORES DE X & Y
//< Busque na google por VLA - Variable Lenght Array.
    unsigned int jogadores_idades[ x_times * y_jogadores ];
    /**< Declarado VETOR com o produto de times por jogadores. */
    /**< Busque por VLA. Para mais informação */
    float time_media_idade[ x_times ];
    /**< Declarado VETOR para media de idade por time */
    /**< Vetor-Flutuante-sem sinal: apenas valores positivos. */


//< resposta A LETRA B) DEPENDE DA LETRA A)
    unsigned int i, j, input;
    for( i = 0; i < x_times; i++ )
    {
        for( j = 0; j < y_jogadores; j++ )
        {
            printf( "Entre com a Idade de %u-Time, %u-Jogador: ", i + 1, j + 1 );
            scanf( " %u", &input );

            jogadores_idades[ ((i * j) +  j) ] =  input;
            /**< Para aij temos i x j + j. */
            time_media_idade[ i ] =  input + time_media_idade[ i ];

            if( input < 18u ) menor_de_idade++;
            /**< Respondendo a questão A). */

            input = 0;

        }
        time_media_idade[ i ] = time_media_idade[ i ] / j;
        /**< Respondendo a questão B). */
    }

    printf( "\n\n%s%u%s%s%u%s%s",
           "*** No campeonato tem ", x_times * y_jogadores, " jogadores.\n",
           "Destes ", menor_de_idade, " tem menor idade (<18 anos).\n",
           "A Media de Idade e:\n" );

//< EXIBIR: RELATORIO FINAL.
    for( i = 0; i < x_times; i++ )
    {
        printf( "%u-Time, Media de idade igual: %.2f\n", i + 1,
               time_media_idade[ i ] );
    }

    printf( "\nFinal de Resposta para A & B\n\n" );
    return 0;
}

 

____________________________________

  • Curtir 1
Postado

        :lol:, compreendo, foi um rascunho da solução... com mais tempo venho aqui

e farei um Bottom-up deste código, e o farei mais limpo e inteligível.

 

 

 

 

:thumbsup:

Postado

         Para construção de um melhor entendimento, de todos que por motivos

finalizar uma busca neste tópico, dividirei cada solução em etapas complementares

de um mesmo código. Começando do começo, LETRA A).

 

 

Em 22/12/2016 às 22:21, Intruder18 disse:

"Em um campeonato de futebol existem x times e para cada tipo, existem y jogadores. Faça um programa que receba: o valor de x e de y, a idade, o peso e a altura de cada um dos jogadores, calcule e mostre:

 

Em 22/12/2016 às 22:21, Intruder18 disse:

a) a quantidade de jogadores com idade inferior a 18 anos;

         Para este quesito precisamos de; 

         Variável: Idades[  todos os jogadores  ], menor_idade, x , y;

ou seja, um vetor cujo o largura é o número de jogadores do campeonato (produto de x y) , 

x é número de times, e y o número de jogadores de cada time, daí a justificativa de o n. jogadores

ser o produto de x y. Para  A, não é necessário entrar com peso e altura, logo serão por hora

ignoradas estas entradas ou in-putis.

 

 

CODE FULL: 

#include <stdio.h>

  int main(void){

  unsigned int x, y; /**< x, y número de Times, Jogadores. */
  //! O VETOR IDADE SOMENTE É CRIADO QUANDO TIVERMOS X & Y

  printf("**** Campeonato software.\n");
  printf( "** Digite o numero de times e jogadores no formato( x y ): " );
  scanf( "%u%u", &x, &y);

  float idades[ x * y ]; /**< vetor idade tem largura do produto de x y. */
  //! VLA- Não é método mais adequado para alocação de memória, mas util
  //! quando estamos escrevendo para pequenos vetores de largura pequena.
  float media_idade_time[ x ];/**< precisa de uma variável para caada time.*/
  //! declarou-se flutuantes porque a média pode resultar em números quebrados.
  float alturas[ x * y ];//*< precisa da altura de todos os jogadores. */
  float pesos[ x * y ];//*< precisa da peso de todos os jogadores. */
  unsigned int menor_idade; /**< esta variável contém o n. de menor idade. */
  float media_altura_todos;/**< esta variável contém a média geral de altura */
  unsigned int acima_80_kg;/**< esta variável contém a os de peso > 80kg */
  float m_i_100_kg;/**< Média da idade dos que tem +100kg */
  unsigned int jog_100_kg;/**< Ocorrências dos que tem +100kg */

  //! Para próximo passo é necessário duas estruturas FOR aninhadas.
  unsigned int i, j; /**< i: linhas, j: colunas. */
  float aij; /**< aij: é o elemento, aqui optei por flutuante por ser mais 
	             *  flexível como in-put. */
  //! NESTE PONTO TEMOS 2 VETORES NÃO PODEMOS ARRISCAR DEIXA-LOS SEM INICIAR.
  for( i = 0; i < x; i++)
    for( j = 0; j < y; j++)
    idades[ (i * y) + j ] = media_idade_time[ i ] = 0,
  alturas[ (i * y) + j ] = 0; 
  /**< Inicializando vetores. */

  menor_idade =  0; /**< vamos iniciar, pois será usada a partir de agora. */
  media_altura_todos =  0;/**< vamos iniciar. */
  acima_80_kg = 0;/**< incializando... */
  m_i_100_kg = 0;
  jog_100_kg = 0;

  for( i = 0; i < x; i++ ){/**< percorre as linhas: ou times. */
    printf("** Entre com os dados dos jogadores do %u-Time.\n", i + 1);
    for( j = 0; j < y; j++ ){/**< percorre as colunas: ou jogadores. */
      printf("* Jogador %u: ", j + 1);
      printf("#formulario[ idade altura peso ]: ");
      scanf(" %f", &aij);
      /**< captura idade: sem tratamento de in-puts. */

      idades[ (i * y) + j ] =  aij; /**< Respondendo A) */
      media_idade_time[ i ] += aij; /**< Respondendo B) */

      scanf(" %f", &aij);
      /**< captura altura: sem tratamento de in-puts. */

      alturas[ (i * y) + j ] = aij; /**< Resposdendo C) */

      scanf(" %f", &aij);
      /**< captura peso: sem tratamento de in-puts. */

      pesos[ (i * y) + j ] = aij; /**< Respondendo D) */
    }
    printf("\n");
  }

  //! A PARTIR DE AGORA: GERAR RELÁTÓRIOS.
  //! Primeiro relátorio é a tarefa A), B), C) e E)
  printf("\nRelatorios Consolidados...\n");
  for( i = 0; i < x; i++ ){/**< percorre as linhas: ou times. */
    for( j = 0; j < y; j++ ){/**< percorre as colunas: ou jogadores. */
      if(idades[ (i * y) + j ] < 18u)menor_idade++;
      /**< Se menor que 18 anos incremente menor idade. */
      //! RESPOSTA DE A) */
      media_altura_todos += alturas[ (i * y) + j ]; 
      /**< Resposdendo C) */
      if(pesos[ (i * y) + j ] > 80u)acima_80_kg++;
      /**< Respondendo D) */
      if(pesos[ (i * y) + j ] > 100u){
        m_i_100_kg += pesos[ (i * y) + j ];
        jog_100_kg++;
      }
      /**< Respondendo E) */
    }
    media_idade_time[ i ] /= y;/**< A cada intereção de time, é calculada
		* a média do time atual, a soma das idades dividido por n. jogadores. */
    //! RESPOSTA DE B)
  }
  media_altura_todos /= x * y;/**< Média Geral
	* a média do time atual, a soma das alturas dividido por todos jogadores.*/
  //! RESPOSTA DE C)


  //! A PARTIR DE AGORA: EXIBIR OS RELÁTÓRIOS.
  //! Primeiro relátorio é a tarefa A), B), C) e E)
  printf("** Relatorios.\n");
  printf("* Total de Jogadores de idade < 18: %u jogador(es).\n",menor_idade);
  printf("* A Media de idade por time.\n");
  printf("* #Time | media de idade.\n");
  for( i = 0; i < x; i++ ){
    printf("* #%3u  | %.1f anos.\n", i + 1, media_idade_time[ i ]);
  }
  printf("* A media das alturas e: %.2f metro(s).\n", media_altura_todos);
  if(acima_80_kg)/**< Se 0 então não faz nd. */
    printf("* %.1f%% dos jogadores com +80kg.\n", (float)acima_80_kg/(x*y)*100);
  if(jog_100_kg)/**< Se 0 então não faz nd. */
    printf("* Em media %.1f jodadores têm +100kg.\n", m_i_100_kg / jog_100_kg);
  printf("** Fim.\n");
  //! FIM.
  return 0;
}

          Preciso do feedback, desta maneira ficou claro?

Faça-me as perguntas que quiser.

 

 

 

Referência

Novo C: VLA- Matriz de Comprimento Variável

______________________________________

  • Curtir 1
Postado
3 minutos atrás, Intruder18 disse:

Mauro, está ficando mais claro sim... Sua didática é excelente. Pode me esclarecer a utilização do comando unsigned para declarar as variáveis?

       Preciso garantir que, no momento, as magnitudes estejam todo no conjunto Z+,

porque assim garanto equiparação.

 

 

     Porém o que é unsigned? Aqui

Postado
5 minutos atrás, Mauro Britivaldo disse:

       Preciso garantir que, no momento, as magnitudes estejam todo no conjunto Z+,

porque assim garanto equiparação.

 

 

     Porém o que é unsigned? Aqui

Excelente vou ler. A questão a) ficou bem clara.

Postado

B) a média das idades dos jogadores de cada time;

         Reutilizando o código acima, com o in-put já pronto, necessita agora de declarar

um vetor, cujo largura é número de times, já que a média é de todos do mesmo time.

 

Código atualizado com B).

 

C) a média das alturas de todos os jogadores do campeonato;

         Aqui temos um novo in-put: altura e como é de todos os jogadores, segue mesma

lógica que idade.

 

Código atualizado com C)

 

D) a percentagem de jogadores com mais de 80 Kg entre todos os jogadores do campeonato;

         Aqui temos um novo in-put: Peso e com a mesma logística que em altura

 

E) a média de idade dos jogadores com peso acima de 100 Kg.

        É a junção de tudo aprendido. :lol:

Visitante
Este tópico está impedido de receber novas respostas.

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