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:
- P - pontos
- J - jogos
- V - vitórias
- E - empates
- D - derrotas
- GP - gols pró
- GC - gols contra
- SG - saldo de gols
- % - aproveitamento
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:
- maior número de vitórias;
- maior saldo de gols;
- maior número de gols pró;
- resultado do confronto direto, se o empate for entre apenas
dois times;
- 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:
- char *fgets(char *s, int size, FILE *stream);
Esta função lê no máximo um caracter a menos que size
do arquivo apontado por stream e armazena os caracteres
lidos na string s. A leitura termina depois de um EOF
(end of file) ou depois de um newline (fim de linha).
Se um fim de linha é lido, ele é armazenado na string. Um '\0'
é armazenado depois do último caracter lido.
- int sscanf(const char *str, const char *format, ...);
Funciona como a função scanf, porém os elementos lidos
estão vindo da string str.
- int ungetc(int c, FILE *stream);
Esta função recoloca c (convertido para char) no arquivo
stream, onde ele fica disponível para a próxima leitura.
- int atoi(const char *nptr);
Esta função converte a parte inicial da string nptr para
um valor int.
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:
- Maior quantidade de acertos de placares exatos dos jogos;
- Maior quantidade de acertos de vencedores dos jogos;
- Maior quantidade de acertos no número de gols da equipe vencedora;
- 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
- O EP é estritamente individual.
- O EP é estritamente individual. Usaremos um sistema para
detecão de EPs copiados.
- O EP é estritamente individual. Alunos envolvidos em cola
serão reprovados na disciplina sem mais, e seus nomes serão
encaminhados para a Comissão de Graduação para demais
providências.
- Exercícios atrasados não serão aceitos.
- Capriche na documentação do seu programa.
- Coloque o cabeçalho usual em seu programa (como em MAC110), com nome,
número USP, curso, data, nome do professor e identificação do EP...
- A entrega do programa consiste da entrega eletrônica do programa.
O seu
programa
deve ser entregue até dia 31 de
outubro, inclusive.
Last modified: Wed Oct 6 12:47:43 BRT 2010