Especificação do Trabalho Prático O trabalho prático da disciplina consiste em desenvolver um programa utilizando a linguagem de programação C. A seguir, encontram-se a descrição do problema, a forma de submissão do trabalho e os critérios de avaliação. 1. Descrição do problema O Diretório Acadêmico do Centro de Tecnológico de uma Universidade gostaria de desenvolver um sistema para controle do Campeonato de Futebol, chamado Copa CT de Futebol. O campeonato é disputado entre 4 times pré-definidos (cada um de um curso) e em dois turnos, ou seja, cada time joga contra os outros duas vezes (uma vez como time da casa e outra como visitante). Por fim, o campeonato é de pontos corridos, em que apenas a quantidade de pontos de cada time é usada como critério de classificação. Sendo conhecidos os cursos participantes da Copa CT de Futebol, são atribuídos códigos a cada um deles, conforme tabela a seguir: Identificador Curso 1 Ciência da Computação 2 Engenharia Ambiental 3 Engenharia Civil 4 Engenharia Mecânica Neste diretório acadêmico, no entanto, os alunos trabalham somente em modo texto (DOS ou Console do Linux) e não há nenhum computador com um ambiente gráfico de janelas (Windows, Gnome). Desenvolva o programa de acordo com as especificações desta seção. 1.1. Menu de opções Ao ser iniciado, seu programa deve exibir um menu de opções. As opções possíveis são: COPA CT DE FUTEBOL 1 - Cadastrar Novo Jogo 2 - Ver Jogos Pendentes 3 Verificar Placar 4 - Ver Classificacao 5 Sair Seu programa deve ler a opção escolhida e proceder como descrito nas demais seções abaixo. Caso o usuário digite qualquer coisa diferente dos números de 1 a 5, você deve informar que a opção não existe e exibir o menu novamente. Conforme mostrado a seguir:
Escolha uma opcao: 0 Opcao invalida! Escolha uma opcao: 1.2. Cadastrar Novo Jogo Escolhida a opção 1, seu programa deve cadastrar um novo jogo disputado. Deve ser informado ao usuário o código de todos os times e, sem seguida, solicitado os identificadores do time da casa e do visitante, além da quantidade de gols marcados por cada um. Conforme mostrado a seguir: Escolha uma opcao: 1 Cadastrar novo jogo 1-Ciencia da Computacao 2-Engenharia Ambiental 3-Engenharia Civil 4-Engenharia Mecanica Informe o identificador do time da casa: 4 Informe o identificador do time visitante: 1 Informe a quantidade de gols da Engenharia Mecanica: 3 Informe a quantidade de gols da Ciencia da Computacao: 1 Caso o usuário informe identificadores iguais para o time da casa e para o visitante, seu sistema deve solicitar novamente que seja informado o time visitante. Conforme mostrado a seguir: Escolha uma opcao: 1 Cadastrar novo jogo 1-Ciencia da Computacao 2-Engenharia Ambiental 3-Engenharia Civil 4-Engenharia Mecanica Informe o identificador do time da casa: 1 Informe o identificador do time visitante: 1 O time da casa e o time visitante devem ser diferentes! Informe o identificador do time visitante: 2 Caso o usuário informe identificadores de um jogo que já ocorreu, seu sistema deve solicitar novamente que sejam informados os identificadores do time da casa e do visitante. Conforme mostrado a seguir:
Escolha uma opcao: 1 Cadastrar novo jogo 1-Ciencia da Computacao 2-Engenharia Ambiental 3-Engenharia Civil 4-Engenharia Mecanica Informe o identificador do time da casa: 1 Informe o identificador do time visitante: 2 Esse jogo ja ocorreu. Informe o identificador do time da casa: 1 Informe o identificador do time visitante: 3 Caso o usuário informe um identificador de time não existente, seu programa deve informa-lo e solicitar que informe o código novamente, até que seja informado um código correto. Escolha uma opcao: 1 Cadastrar novo jogo 1-Ciencia da Computacao 2-Engenharia Ambiental 3-Engenharia Civil 4-Engenharia Mecanica Informe o identificador do time da casa: 10 Time nao existe! Informe o identificador do time da casa: 1 Informe o identificador do time visitante: 9 Time nao existe! Informe o identificador do time visitante: 3 Caso todos os jogos já tenham sido disputados, seu programa deve informar ao usuário que todos os jogos já foram cadastrados e voltar ao menu principal. Escolha uma opcao: 1 Todos os jogos ja ocorreram.
Após o cadastro de um jogo, o placar deve ser armazenado e devem ser contabilizados os pontos de cada time segundo a tabela a seguir: Tipo Pontos Vitória 3 Empate 1 Derrota 0 Ao final de cada jogo cadastrado, o programa deve apresentar o menu de opções novamente. 1.3. Ver Jogos Pendentes Escolhida a opção 2, seu programa deve exibir a lista de jogos ainda não disputados. Essa lista deve estar ordenada pelos identificadores do time da casa e do visitante (nessa ordem). Veja o exemplo mostrado a seguir em que nenhum jogo foi disputado ainda (ou seja, restam 12 jogos): Escolha uma opcao: 2 Jogos pendentes Ciencia da Computacao x Engenharia Ambiental Ciencia da Computacao x Engenharia Civil Ciencia da Computacao x Engenharia Mecanica Engenharia Ambiental x Ciencia da Computacao Engenharia Ambiental x Engenharia Civil Engenharia Ambiental x Engenharia Mecanica Engenharia Civil x Ciencia da Computacao Engenharia Civil x Engenharia Ambiental Engenharia Civil x Engenharia Mecanica Engenharia Mecanica x Ciencia da Computacao Engenharia Mecanica x Engenharia Ambiental Engenharia Mecanica x Engenharia Civil Após exibir a lista de jogos pendentes, o programa deve apresentar o menu de opções novamente.
1.4. Verificar Placar Ao escolher a opção 3, seu programa deve solicitar ao usuário os identificadores do time da casa e do visitante. Em seguida, seu programa deve imprimir o placar da partida, conforme exemplo a seguir: Escolha uma opcao: 3 Verificar Placar Informe o identificador do time da casa: 4 Informe o identificador do time visitante: 1 Engenharia Mecanica 3 x 1 Ciencia da Computacao Caso o jogo desejado pelo usuário ainda não tenha ocorrido, seu programa deve informálo, como mostrado no exemplo a seguir: Escolha uma opcao: 3 Verificar Placar Informe o identificador do time da casa: 4 Informe o identificador do time visitante: 2 Jogo nao ocorreu! Caso o usuário informe times que não existam, seu programa deve informa-lo e pedir que informe novamente o identificador do time, conforme mostrado na seção 1.2. Após exibir o placar, o programa deve apresentar o menu de opções novamente. 1.5. Ver Classificação Escolhida a opção 4, seu programa deve exibir a classificação ordenada dos times. Conforme exemplo mostrado a seguir: Escolha uma opcao: 4 Classificacao POS. TIME 1 Ciencia da Computacao 2 Engenharia Civil 3 Engenharia Ambiental 4 Engenharia Mecanica PONTOS 7 6 3 0 Não é necessário considerar outros critérios de desempate além dos pontos. Após exibir a classificação, o programa deve apresentar o menu de opções novamente.
1.6. Sair Para sair do jogo, basta que o usuário escolha a opção 5 do menu. O programa deve ser encerrado sem imprimir nenhuma mensagem. 1.7. Mensagens O Diretório Acadêmico do Centro de Tecnologia gostaria de verificar que o software produzido atende fielmente às especificações. Para isso, utilizará testes automatizados (descritos na próxima subseção). Para que estes testes funcionem, é fundamental que as mensagens exibidas pelo seu programa sigam os padrões pré-estabelecidos. Estes padrões estão descritos na tabela abaixo. Ao ler a tabela, note que: O símbolo representa uma quebra de linha (\n no printf()). Quando presente sozinho em uma linha, significa que ali deve ser impressa uma linha em branco; O termo deve ser substituído por um espaço; O termo <nome do time> deve ser substituído pelo nome do time em questão; O termo <tab> deve ser substituído pelo tab (\t no printf()); O termo <posicao> deve ser substituído pela posição do time na classificação; O termo <pontos> deve ser substituído pela quantidade de pontos do time; O termo <gols> deve ser substituído pela quantidade de gols do time. 01 Apresentando o menu de opções COPA CT DE FUTEBOL 1 - Cadastrar Novo Jogo 2 - Ver Jogos Pendentes 3 - Ver Classificacao 4 Sair 02 Solicitando uma opção Escolha uma opcao: 03 Informando que a opção escolhida não existe 04 Cadastrando Novo Jogo 05 06 Informando identificador do time da casa Informando identificador do time visitante Opcao invalida! 1-Ciencia da Computacao 2-Engenharia Ambiental 3-Engenharia Civil 4-Engenharia Mecanica Cadastrar novo jogo Informe o identificador do time da casa: Informe o identificador do time visitante:
07 08 Informando a quantidade de gols de um time Informando que o time da casa e o time visitante devem ser diferentes Informe a quantidade de gols da <nome do time>: O time da casa e o time visitante devem ser diferentes! 09 Informando que um jogo já ocorreu Esse jogo ja ocorreu. 10 Informando que todos os jogos já ocorreram Todos os jogos ja ocorreram. 11 Exibindo cabeçalho de jogos pendentes 12 Exibindo jogo pendente 13 Exibindo cabeçalho da classificação 14 Exibindo posição de um time Jogos pendentes <nome do time> x <nome do time> Classificacao POS. <tab> TIME <tab><tab><tab><tab> PONTOS <posicao> <tab> <nome do time> <tab><tab> <pontos> 15 Exibindo cabeçalho de verificação de placar Verificar Placar 16 Informando que um jogo não ocorreu Jogo nao ocorreu! 17 Exibindo placar <nome do time> <gols> x <gols> <nome do time>
1.8. Testes automatizados Como mencionado anteriormente, o Diretório Acadêmico conduzirá uma série de testes automatizados para garantir que o programa funciona corretamente. Tais testes consistem em: fornecer arquivos de entrada com uma série de comandos e dados supostamente digitados pelo usuário; e analisar a saída produzida pelo programa. Para isso, em primeiro lugar, é necessário pré-estabelecer, também, o nome do programa. O Diretório Acadêmico gostaria que o programa se chamasse copact. Para facilitar o seu trabalho, o Diretório Acadêmico irá fornecer alguns dados de entrada e saída para testes, de forma que você possa verificar se o seu programa está de acordo com o esperado. No entanto, o Diretório Acadêmico reserva o direito de não compartilhar todos os seus arquivos de testes, de modo a garantir que os programas não estarão viciados nos arquivos existentes. 2. Condições de elaboração e entrega Os trabalhos devem ser feitos individualmente. Alguns alunos poderão ser chamados ao acaso para uma entrevista com o professor, na qual deverão explicar trechos de seus programas. A nota do aluno dependerá desta entrevista. Dado que existem várias versões de compiladores C, fica determinado o uso das versões da ferramenta Dev-C++ instaladas nas máquinas do L@bCiv (Laboratório de Engenharia Civil da UFES) como versões de referência para o trabalho prático. Seu trabalho deve compilar e executar corretamente nas máquinas do laboratório. A entrega do trabalho segue um sistema automatizado de recebimento, descrito a seguir. 2.1. Regras para entrega do trabalho O código-fonte de sua solução deverá ser entregue por e-mail (anexo ao e-mail) para o endereço fbrasileiro@inf.ufes.br. Serão aceitos trabalhos entregues até 30/11/2014 às 23h59. O assunto do e-mail deverá ser o seguinte: pbc-2014-2:trab:<nome>_<ultimo sobrenome> Os termos <nome> e <ultimo sobrenome> deverão ser substituídos pelo nome e pelo último sobrenome, respectivamente, do aluno sem acentos, til ou cedilha, como no exemplo do aluno José Alves Ferreira abaixo: pbc-2014-2:trab:jose_ferreira Repare, novamente, que o nome José foi sem acento. É muito importante que o assunto do e-mail esteja correto, do contrário o sistema de correção automática não reconhecerá sua submissão e seu trabalho será considerado como não recebido.
Se tudo correr bem no recebimento do arquivo, você receberá um e-mail de confirmação do recebimento do trabalho. Neste e-mail haverá um hash MD5 (https://pt.wikipedia.org/wiki/md5#hashes_md5) do arquivo recebido. Para garantir que o arquivo foi recebido sem ser corrompido, gere o hash MD5 do arquivo que você enviou (no site http://onlinemd5.com/ escolha um arquivo e verifique o File checksum gerado) e compare com o hash recebido na confirmação. Caso você não receba o e-mail de confirmação ou caso o valor do hash seja diferente, envie o trabalho novamente. Se o problema persistir, contate o professor. O arquivo enviado por e-mail deve estar no formato.c com o nome copact.c. É essencial que sejam seguidas à risca as instruções acima, caso contrário a correção automatizada não funcionará. Trabalhos que não passarem pela correção automatizada passarão por correção manual, porém sofrerão penalidade de 2 pontos. 3. Critérios de avaliação Os trabalhos serão avaliados primeiramente pela execução correta, seguindo os seguintes critérios objetivos: Critério Nota Trabalhos que não compilarem. De 0 a 3 Trabalhos que compilarem mas não gerarem resultados corretamente. De 3 a 7 Trabalhos que compilarem e gerarem os relatórios corretamente. De 6 a 10 Trabalhos entregues fora do prazo. -1 por dia de atraso Trabalhos que não seguirem os padrões de mensagem estabelecidos na seção 1.7. -0,1 por erro Trabalhos que não permitirem os testes automatizados descritos nas seções 1.8 e 2.1. -2 pontos Em segundo lugar, os trabalhos serão avaliados segundo critérios subjetivos definidos pelo professor, variando a nota dentro da faixa de notas definida pelo critério anterior. Alguns dos critérios subjetivos avaliados serão: Legibilidade (nomes de variáveis bem escolhidos, código bem formatado, uso de comentários quando necessário, etc.); Consistência (utilização de um mesmo padrão de código); Eficiência (sem exageros, tentar evitar grandes desperdícios de recursos); Uso de estruturas de dados adequadas. Espera-se, por exemplo, que sejam usados vetores, matrizes e/ou structs. Os trabalhos serão verificados automaticamente por uma ferramenta de detecção de plágio. Em caso de detecção de cópia (parcial ou integral), todos os envolvidos receberão nota ZERO. Em outras palavras, tanto os alunos que copiaram quanto o que deixou copiar receberão ZERO.
4. Observações finais Caso haja algum erro neste documento, serão publicadas novas versões e divulgadas erratas em sala de aula. É responsabilidade do aluno manter-se informado, frequentando as aulas ou acompanhando as novidades na página da disciplina na Internet.