/* * Questão: * Em um campeonato Europeu de Volleyball, se inscreveram 30 países. * Sabendo-se que na lista oficial de cada país consta, além de outros dados, * peso e idade de 12 jogadores, crie um programa que leia e apresente as seguintes informações: * • O peso médio e a idade média de cada um dos times; * • O atleta mais pesado de cada time; * • O atleta mais jovem de cada time; * • O peso médio e a idade média de todos os participantes */ #include <stdio.h> #include <stdlib.h> #define NUM_PAISES 2 #define NUM_JOG 2 typedef struct { float peso; int idade; } tipoJogador; int main() { tipoJogador info[NUM_PAISES][NUM_JOG]; // matriz com Jogadores por País int idx_pais, idx_jog; //índice de países e de jogadores // Vou explicar essas de baixo no decorrer do código: float peso_medio_time[NUM_PAISES], idade_media_time[NUM_PAISES], mais_pesado_time[NUM_PAISES], peso_medio_geral, idade_media_geral; int idx_mais_pesado_time[NUM_PAISES], mais_jovem_time[NUM_PAISES], idx_mais_jovem_time[NUM_PAISES]; //gerando os índices para os países com o "for" for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { printf("Coletando dados do país %d:\n", idx_pais); //gerando os índices para os jogadores com o "for" for (idx_jog=0;idx_jog<NUM_JOG;idx_jog++) { printf(" Coletando dados do jogador %d:\n", idx_jog); // matriz na posição país: info[idx_pais] // matriz desse país na posição do jogador: info[idx_pais][idx_jog] // acesso a estrutura (struct) desse jogador, posição idade: printf(" Idade: "); scanf("%d", &info[idx_pais][idx_jog].idade); // acesso a estrutura (struct) desse jogador, posição peso: printf(" Peso: "); scanf("%f", &info[idx_pais][idx_jog].peso); // Linha em branco pra ficar mais fácil a visualização na tela printf("\n"); } } // Agora que os dados foram coletados, vamos fazer as contas. // vou fazer cada um separado para ficar mais legível, mas pode fazer junto também. // para peso médio e idade média, temos que ver que cada time é um país. // por isso, temos que fazer um vetor com uma posição para cada país: // peso_medio_time[NUM_PAISES], idade_media_time[NUM_PAISES] // Agora, é percorrer pelos jogadores de cada país fazer a soma do peso e da idade // Como deseja-se a média, após somar o peso e a idade, vamos dividir pelo número de jogadores // 1º passo: zerar os acumuladores (é como chamamos as varíaveis que vão acumular somas, produtos, etc. de outras variáveis): for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { peso_medio_time[idx_pais] = 0.0; idade_media_time[idx_pais] = 0.0; } // 2º passo: somar o peso e a idade de cada jogar para cada país for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { // Obs.: o conteúdo do 1º passo poderia ter sido feito aqui (nessa linha) // ao invés de ser feito lá em cima // país da posição "idx_pais": peso_medio_time[idx_pais] e idade_media_time[idx_pais] for (idx_jog=0;idx_jog<NUM_JOG;idx_jog++) { // jogador da posição "idx_jog" peso_medio_time[idx_pais] += info[idx_pais][idx_jog].peso; idade_media_time[idx_pais] += info[idx_pais][idx_jog].idade; } // 3º passo: agora que já fiz a soma dos jogadores, vou dividir pela quantidade de jogadores peso_medio_time[idx_pais] = peso_medio_time[idx_pais] / NUM_JOG; idade_media_time[idx_pais] = idade_media_time[idx_pais] / NUM_JOG; } // 3º passo: também poderia ter sido feito aqui fora, em um laço separado para ele: /*for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { peso_medio_time[idx_pais] = peso_medio_time[idx_pais] / NUM_JOG; idade_media_time[idx_pais] = idade_media_time[idx_pais] / NUM_JOG; }*/ // 4º passo: imprimir na tela (ou poderia ter feito no último FOR): printf("\n"); //linha em branco pra separar a saída dos demais for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { printf("Peso médio do time %d: %.2f\n", idx_pais, peso_medio_time[idx_pais]); printf("Idade média do time %d: %.2f\n", idx_pais, idade_media_time[idx_pais]); } // Agora, vamos calcular o atleta mais pesado de cada time em "mais_pesado_time[NUM_PAISES]" // 1º passo: zerar o vetor mais_pesado_time[NUM_PAISES]: for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { // como eu quero achar o mais pesado, vou "zerar" (termo usado) com -1 // pois assim, qualquer peso que eu comparar, mesmo zero, será maior que ele // obs.: a forma mais ágil seria colocar o primeiro atleta de cada time como o mais pesado mais_pesado_time[idx_pais] = -1.0; } // 2º passo: procurar o mais pesado: for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { // país da posição "idx_pais": info[idx_pais], mais_pesado_time[idx_pais] e // idx_mais_pesado_time[idx_pais] for (idx_jog=0;idx_jog<NUM_JOG;idx_jog++) { // jogador da posição "idx_jog": info[idx_pais][idx_jog] // se o peso do jogador é mais pesado que o peso já armazenado como mais pesado: if (info[idx_pais][idx_jog].peso > mais_pesado_time[idx_pais]) { // peso mais pesado é o atual: mais_pesado_time[idx_pais] = info[idx_pais][idx_jog].peso; // índixe do peso mais pesado é atualizado: idx_mais_pesado_time[idx_pais] = idx_jog; } } } // 4º passo: imprimir na tela: printf("\n"); //linha em branco pra separar a saída dos demais for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { printf("Jogador mais pesado do país %d:\n", idx_pais); printf(" Número do jogador: %d\n", idx_mais_pesado_time[idx_pais]); printf(" Peso: %.2f\n", mais_pesado_time[idx_pais]); } // Agora, vamos procurar o atleta mais jovem de cada time: // 1º passo: zerar o vetor mais_jovem_time[NUM_PAISES]: for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { // vamos colocar um valor muito alto agora (9999), pois qualquer um vai // ser mais jovem que 999 mais_jovem_time[idx_pais] = 999; } // 2º passo: procurar o mais jovem: for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { // país da posição "idx_pais": info[idx_pais], mais_jovem_time[idx_pais] e // idx_mais_jovem_time[idx_pais] for (idx_jog=0;idx_jog<NUM_JOG;idx_jog++) { // jogador da posição "idx_jog": info[idx_pais][idx_jog] if (info[idx_pais][idx_jog].idade < mais_jovem_time[idx_pais]) { mais_jovem_time[idx_pais] = info[idx_pais][idx_jog].idade; idx_mais_jovem_time[idx_pais] = idx_jog; } } } // 3º passo: imprimir na tela: printf("\n"); //linha em branco pra separar a saída dos demais for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { printf("Jogador mais jovem do país %d:\n", idx_pais); printf(" Número do jogador: %d\n", idx_mais_jovem_time[idx_pais]); printf(" Idade: %d\n", mais_jovem_time[idx_pais]); } // Agora, vamos calcular o peso médio e a idade média de todos os participantes: // 1º passo: zerar as variáveis correspondentes (acumuladores correspondentes): peso_medio_geral = 0.0; idade_media_geral = 0.0; // 2º passo: acumular a soma geral: for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { // país da posição "idx_pais": info[idx_pais] for (idx_jog=0;idx_jog<NUM_JOG;idx_jog++) { // jogador da posição "idx_jog": info[idx_pais][idx_jog] peso_medio_geral += info[idx_pais][idx_jog].peso; idade_media_geral += info[idx_pais][idx_jog].idade; } // 3º passo: como acabei de percorrer todos os jogadores do time, é hora de // dividir pelo total de jogadores (NUM_JOG): peso_medio_geral = peso_medio_geral / NUM_JOG; idade_media_geral = idade_media_geral / NUM_JOG; } // 4º passo: imprimir na tela (ou poderia ter sido feito dentro do último FOR) printf("\n"); //linha em branco pra separar a saída dos demais for (idx_pais=0;idx_pais<NUM_PAISES;idx_pais++) { printf("Peso médio geral do time %d: %.2f\n", idx_pais, peso_medio_geral); printf("Idade média geral do time %d: %.2f\n", idx_pais, idade_media_geral); } }