Submit | All submissions | Best solutions | Back to list |
EDUPT07 - Copa do mundo |
A Copa do Mundo FIFA de 2022 está chegando. O país inteiro se prepara para torcer para a equipe canarinho conquistar mais um título.
Na Copa do Mundo, depois de uma fase de grupos, um número par de equipes disputa a Fase Final, composta de quinze jogos eliminatórios. A figura abaixo mostra a tabela de jogos da Fase Final:
Por exemplo, na tabela a seguir, as 16 equipes finalistas são representadas por letras maiúsculas (de A a P), e os jogos são numerados de 1 a 15. Por exemplo, o jogo 3 é entre as equipes identificadas por E e F; o vencedor desse jogo enfrentará o vencedor do jogo 4, e o perdedor será eliminado. A equipe que vencer os todos os jogos da Fase Final será a campeã (por exemplo, para a equipe K ser campeã ela deve vencer os jogos 6, 11, 14 e 15.
Saiba que uma partida nunca termina em empate. Um time sempre termina com mais gols que outro, seja por prorrogação ou pênaltis.
Faça um programa que simule a Fase Final da Copa do Mundo.
Sugere-se que, para facilitar seu desenvolvimento, siga os passos a seguir:
- Crie um registro (estrutura) chamada time, que contenha os seguintes campos:
char caracter; //caracter que representa o time. A caracter vai de A a P
char nome[30]; //nome do time (país). Por exemplo: BRASIL.
int continente; //Continente do país. 1: AMERICA; 2: EUROPA; 3: AFRICA; 4: ASIA; 5: OCEANIA.
int qtde_partidas; //quantidade de partidas realizadas na Fase Final. De 1 a 4.
int gols_a_favor; //todos os gols realizados pela equipe na Fase Final.
int gols_contra; //todos os gols que a equipe sofreu na Fase Final.
int saldo_gols; // gols a favor – gols contra na Fase Final.
- Crie um registro (estrutura) chamada partida, que contenha os seguintes campos:
int código; //código da partida. Por exemplo: 3, significa a partida entre E e F nas oitavas de final.
char time1; //caracter do time 1. Por exemplo E.
char time2; //caracter do time 2. Por exemplo F.
int gols_time1; //a quantidade de gols que o time 1 realizou na partida.
int gols_time2; //a quantidade de gols que o time 2 realizou na partida.
- Faça a criação e alocação dinâmica (no momento que achar conveniente) de um vetor para os times e outro para as partidas. As informações de tamanho do vetor estão descritas nas entradas como se descreve nos próximos itens.
- Crie uma função que receba um vetor que represente os times do campeonato e o tamanho do vetor. Esta função deverá ler os dados do time (caracter, nome, continente) e armazenar os valores no vetor. E também inicializar os campos quantidade de partidas e referentes aos gols.
void ReceberTimes(time VetorTimes[], int tamanho);
- Crie uma função receba um vetor que represente as partidas do campeonato e o tamanho do vetor. Esta função deverá ler os dados da partida e armazenar os valores no vetor. Ao receber os dados da partida, você deverá atualizar os dados do time. Por exemplo, após a partida de código 1, você deverá localizar os times A e B no vetor de times e atualizar os campos: qtde_partidas, gols_a_favor, gols_contra, saldo_gols.
void ReceberPartidas(partida VetorPartidas[], int tam_part,time VetorTimes[], int tam_times);
Ao receber os dados da partida, você deverá atualizar os dados do time. Por exemplo, após a partida de código 1, você deverá localizar os times A e B no vetor de times e atualizar os campos: qtde_partidas, gols_a_favor, gols_contra, saldo_gols.
- Crie uma função que receba um vetor que represente os times do campeonato e o tamanho do vetor. Esta função deverá retornar o time com maior saldo de gols.
time MelhorSaldoGols(time VetorTimes[], int tamanho);
- Crie uma função que receba um vetor que represente os times do campeonato e o tamanho do vetor. Esta função deverá retornar o time com pior saldo de gols.
time PiorSaldoGols(time VetorTimes[], int tamanho);
- Crie uma função que receba dois vetores: um que represente as partidas e outro que represente os times e seus respectivos tamanhos; e um continente. Esta função deverá retornar o time melhor classificado do continente, ou seja, quem disputou mais partidas na Fase Final. Caso haja empate, os critérios de desempate são: saldo de gols; e gols a favor (critérios válidos para qualquer caso de empate do programa)
time MelhorClassificadoContinente(partida VetorPartidas[], int tam_part, time VetorTimes[], int tam_times, int continente);
- Ao final, a saída deverá apresentar a caracter correspondente aos: time com melhor saldo de gols, time com pior saldo de gols, time melhor classificado de cada continente (sempre haverá o times de todos continentes)
Entrada:
Inicialmente é informado o número n de times (múltiplo de 8 entre 8 e 40), seguido das informações de cada time: caracter que o representa, nome (até 30 caracteres), número do continente do time(1: AMERICA, 2: EUROPA, 3: AFRICA, 4: ASIA, 5: OCEANIA). Segue-se o número m de partidas seguido dos dados de m partidas, a saber: código da partida (1 e 40), caracter do time 1, caracter do time 2, número de gols do time 1, número de gols do time 2
Saida:
Primeira linha apresenta a caracter correspondente ao time com melhor saldo de gols.
A linha seguinte, apresenta a caracter correspondente ao time com pior saldo de gols.
As 5 linhas seguintes apresentam o número de um continente (1 a 5) seguido da a caracter correspondente ao time melhor classificado de cada continente
Exemplo completo de entrada |
Exemplo completo de saída |
8 A BRASIL 1 B FRANCA 2 C JAPAO 4 D SENEGAL 3 E AUSTRALIA 5 F ARGENTINA 1 G ALEMANHA 2 H INGLATERRA 2 7 1 A B 3 1 2 C D 2 3 3 E F 7 1 4 G H 0 1 5 A D 2 3 6 E H 3 1 7 D E 1 2 |
E F 1:A 2:H 3:D 4:C 5:E |
Added by: | IFTM_Maratona |
Date: | 2022-09-08 |
Time limit: | 5s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | C CPP |
Resource: | Adaptado de Ernani Melo |