Terceiro Exercício-Programa

Brasileirão

Entrega: 31 de outubro

O objetivo deste exercício-programa é aprender a utilizar busca e ordenação de maneira eficiente.

O exercício-programa tem duas partes. Uma das parte é a geração, a partir dos resultados de todos os jogos que já ocorreram em um campeonato, de uma tabela como a que pode ser vista aqui. A outra parte é a geração de uma tabela com a classificação de um conjunto de pessoas que participaram de um bolão sobre este campeonato.

Entrada do programa

A entrada do seu programa virá em dois arquivos. Um deles chama-se resultados.txt e armazena o resultado de cada jogo do campeonato já realizado. O segundo arquivo chama-se bolao.txt e armazena os palpites de cada participante do bolão.

O formato do arquivo resultados.txt é o seguinte. Cada linha do arquivo tem a rodada e o resultado de um dos jogos, conforme o exemplo abaixo:

25 São Paulo   0 x 3 Goiás
25 Atlético-GO 3 x 0 Prudente
25 Santos      4 x 1 Cruzeiro
25 Guarani     1 x 0 Vasco
25 Flamengo    1 x 3 Palmeiras
26 Vasco       3 x 1 Santos
26 Goiás       1 x 1 Flamengo
26 Prudente    4 x 2 Guarani
26 Atlético-PR 1 x 0 Vitória
26 Cruzeiro    3 x 0 Atlético-GO
26 Palmeiras   2 x 0 Internacional
26 Fluminense  1 x 0 Avaí
26 Grêmio      4 x 2 São Paulo
26 Corinthians 1 x 1 Botafogo
26 Ceará       0 x 0 Atlético-MG
Para simplificar, se você quiser, pode remover os brancos dos nomes dos times, ou substitui-los pelo underscore ('_'). Pode também remover os acentos.

No bolão, cada participante declara o resultado de cada jogo da próxima rodada do campeonato. O arquivo bolao.txt é portanto composto de um trecho para cada participante do bolão. Cada trecho começa com o nome do participante em uma linha, e depois o resultado dos jogos segundo este participante, um resultado por linha, no mesmo formato que acima. Se o participante declarar o resultado de um jogo de uma rodada anterior ou futura, este deve ser ignorado. Veja o exemplo abaixo.

Alfredo
Vasco         1 x 0 Goiás
Santos        1 x 2 Palmeiras
Vitória       0 x 1 Grêmio
Prudente      0 x 1 Fluminense
Corinthians   0 x 0 Ceará
Internacional 1 x 0 Guarani
Botafogo      0 x 1 Flamengo
Cruzeiro      1 x 0 Atlético-PR
Avaí          0 x 2 São Paulo
Atlético-GO   1 x 1 Atlético-MG
Arnaldo
Vasco         1 x 1 Goiás
Santos        2 x 0 Palmeiras
Vitória       0 x 3 Grêmio
Prudente      2 x 1 Fluminense
Corinthians   2 x 1 Ceará
Internacional 2 x 0 Guarani
Botafogo      1 x 0 Flamengo
Cruzeiro      3 x 1 Atlético-PR
Avaí          1 x 0 São Paulo
Atlético-GO   2 x 1 Atlético-MG
Carlinhos
Vasco         0 x 1 Goiás
Santos        1 x 1 Palmeiras
Vitória       2 x 1 Grêmio
Prudente      0 x 3 Fluminense
Corinthians   0 x 2 Ceará
Internacional 1 x 0 Guarani
Botafogo      0 x 0 Flamengo
Cruzeiro      1 x 0 Atlético-PR
Avaí          0 x 1 São Paulo
Atlético-GO   1 x 0 Atlético-MG
Coelho
Vasco         2 x 0 Goiás
Santos        1 x 2 Palmeiras
Vitória       1 x 0 Grêmio
Prudente      0 x 2 Fluminense
Corinthians   0 x 0 Ceará
Internacional 2 x 0 Guarani
Botafogo      2 x 1 Flamengo
Cruzeiro      1 x 0 Atlético-PR
Avaí          1 x 0 São Paulo
Atlético-GO   0 x 2 Atlético-MG

Tabela do campeonato

A tabela de classificação dos times no campeonato tem as seguintes informações: Para não sobrarem dúvidas, segue uma breve descrição do que é cada item acima. Pontos (P) é o número de pontos do time: cada vitória vale 3 pontos e cada empate vale 1. Jogos (J) é o número de jogos com o time que já ocorreram. Vitórias (V), empates (E) e derrotas (D) são o número de vitórias, empates e derrotas do time, respectivamente. Gols pró (GP) e gols contra (GC) são o número de gols marcados pelo time, e tomados, respectivamente. O aproveitamento (%) é a razão entre o número de pontos que um time tem e o número máximo de pontos que ele poderia ter.

O seu programa deve gerar um arquivo html com a tabela do campeonato, ordenada pelo número de pontos. Em caso de empate entre dois ou mais clubes ao final da competição, o desempate, para efeito de classificação, será efetuado observando-se os critérios abaixo:

  1. maior número de vitórias;
  2. maior saldo de gols;
  3. maior número de gols pró;
  4. resultado do confronto direto, se o empate for entre apenas dois times;
  5. sorteio.
Um resumo sobre a linguagem html aparece mais à frente.

Algumas funções que podem ser úteis

Dependendo de como você decidir fazer a leitura, algumas das seguintes funções podem ser úteis para fazer a leitura dos dados:

Classificação no bolão

A classificação dos participantes do bolão é a definida de acordo com os seguintes critérios, por ordem de prioridade:
  1. Maior quantidade de acertos de placares exatos dos jogos;
  2. Maior quantidade de acertos de vencedores dos jogos;
  3. Maior quantidade de acertos no número de gols da equipe vencedora;
  4. Maior quantidade de acertos no número de gols da equipe perdedora.
Caso persista o empate em todos os itens, na ordem acima citada, será favorecido o participante que tiver oferecido seus palpites com maior antecedência, ou seja, o que aparece primeiro no arquivo bolao.txt.

Saída do seu programa

O seu programa deve gerar dois arquivos html, um com a tabela do campeonato, como aquela vista aqui, e uma com a lista dos participantes em ordem de classificação no bolão. O leiaute das páginas geradas será levado em conta na sua nota!

A linguagem html

HTML é acrônimo para a expressão inglesa HyperText Markup Language, que significa Linguagem de Marcação de Hipertexto. Trata-se de uma linguagem utilizada para produzir páginas na Web. Documentos HTML podem ser interpretados por navegadores.

Para este EP, você precisa aprender muito pouco de HTML. Comandos HTML são em geral delimitados pelas chamadas etiquetas (tags). Existem vários tipos de etiquetas.

Aqui você encontra um pequeno arquivo HTML que mostra uma tabela. Para ver como o arquivo está escrito em HTML, basta você, no seu navegador, dentro da opção view, escolher page source. Dentro do arquivo coloquei comentários para explicar as etiquetas que lá aparecem. Você pode olhar o fonte de todas as páginas HTML que visita. Desta maneira, aliás, pode descobrir como fazer algumas coisas que acha legais em HTML.

Para mais sobre HTMP, visite o HTML Tutorial da W3SCHOOLS. Em especial, para ver a descrição das muitas etiquetas disponíveis para você fazer seu arquivo HTML, olhe aqui. Você pode achar útil também o W3C Markup Validation Service.

Você já usou um editor de texto chamado emacs? Se não usou, eu o convido a experimentá-lo. Ele não é um editor fácil, mas é um editor muito poderoso, que apresenta ambientes específicos para cada tipo de arquivo que você edita. Experimente abrir um arquivo HTML e um arquivo C no emacs da rede linux e veja se gosta do efeito. Leia mais sobre o emacs aqui.

Recomendações

Escolha bem os algoritmos de ordenação que você vai utilizar. Pense em uma boa maneira de armazenar a informação para que as buscas sejam tão eficientes quanto possível. Organize o seu EP de maneira clara, com funções específicas e bem documentadas para fazer tarefas específicas necessárias.

Comece a fazer o EP o mais cedo possível e divirta-se com ele!

Entrega, prazos e observações


Last modified: Wed Oct 6 12:47:43 BRT 2010