O objetivo deste trabalho é a implementação de um agendador de reunião em Racket.
O trabalho é em equipe de até duas pessoas. O compartilhamento de informações entre as equipes é permitido (e aconselhado), mas o compartilhamento de código não é permitido. Trabalhos que tenham porções significativas de código iguais, ou copiados da internet, serão anulados. Veja a resolução Nº 008/2007-COU para as possíveis sansões disciplinares. Cada membro da equipe deverá apresentar o trabalho individualmente para o professor.
Este trabalho vale 5,0 pontos na nota do terceiro bimestre.
Data de entrega: até o dia 12/11/2012 às 23:00h.
Um agendador de reunião é um programa que encontra horários compatíveis para diversas pessoas fazerem uma reunião. O agendador recebe como entrada os horários de disponibilidade (semanal) de cada pessoa e a duração da reunião e encontra (se existir) os possíveis horários para realizar a reunião.
Este trabalho consiste na implementação de um agendador de reunião em Racket. Para exercitar os conceitos do paradigma funcional, só é permitido usar funções com efeito colateral para as operações de entrada e saída, o restante do programa deve ser puramente funcional. Alguns funções com efeito colateral em Racket tem o nome terminado com !. Estas funções não podem ser utilizadas.
O programa deve receber como parâmetro na linha de comando a duração da reunião e uma lista de arquivos com as disponibilidades das pessoas e escrever na saída padrão os possíveis horários para a realização da reunião. Se não existir nenhum horário que seja possível realizar a reunião, o programa não deve escrever nada na saída padrão.
Cada linha de um arquivo de disponibilidade consiste de um dia da semana seguido por uma sequência de intervalos. Por exemplo, a linha
seg 08:30-10:30 15:45-17:15
significa que a pessoa tem na segunda-feira os horários das 8:30 às 10:30 e das 15:45 às 17:15 livres para a reunião.
Considere os arquivos a
seg 08:30-10:30 14:03-16:00 17:10-18:10
ter 13:30-15:45
qua 11:27-13:00 15:00-19:00
sex 07:30-11:30 13:30-14:00 15:02-16:00 17:20-18:30
e b
seg 14:35-17:58
ter 08:40-10:30 13:31-15:13
qui 08:30-15:30
sex 14:07-15:00 16:00-17:30 19:00-22:00
Se o programa for chamado com os parâmetros 00:45 a b
, o programa deve escrever
na tela a seguinte resposta:
seg 14:35-16:00 17:10-17:58
ter 13:31-15:13
Observe que o formato da saída é o mesmo dos arquivos de entrada.
Para facilitar o desenvolvimento dos programas, está disponível um “projeto”
com os arquivos iniciais de código, um programa testador e um Makefile
para
testar e enviar os programas.
Para fazer o download do projeto é necessário ter o git
instalado. Se você
utiliza um sistema GNU/Linux baseado no Debian (Mint, Ubuntu, etc), o git
pode ser instalado com o comando
sudo apt-get install git
Para fazer o download do projeto, execute o comando
git clone http://malbarbo.pro.br/git/reuni
Após a execução deste comando, um diretório chamado reuni
terá sido criado.
No diretório src/
, estão os arquivos com o código Racket inicial. Você deve
escrever o seu código no arquivo src/reuni.rkt
. O arquivo
src/reuni-testes.rkt
contém os testes unitários.
Para executar os testes unitários, abra o arquivo src/reuni-testes.rkt
no
DrRacket e clique no botão Correr (ou Crtl-R).
Os testes funcionais devem ser executados no terminal. Para executar os testes, entre no diretório reuni e execute um dos comandos
make teste-unitario # executa os testes unitários
make teste-funcinal # executa os testes funcionais
make teste # executa os testes unitários e funcionais
Para enviar o trabalho, execute o comando
make enviar
O script de envio criará um arquivo compactado com os arquivos a serem entregues para correção e enviará para a página do professor.
Após enviar o trabalho, o aluno deverá entrar na página da disciplina, imprimir e assinar o termo de autoria. O termo de autoria é um documento em que o aluno afirma que ele é o autor do código do trabalho que ele enviou e que, portanto, não copiou parte significativa do programa de outra pessoa ou da internet.
O trabalho deve ser enviado até as 23:00h do dia 12/11/2012. O termo de autoria assinado deve ser entregue pessoalmente ao professor até o dia 22/11/2012 no horário da aula.
Este trabalho vale 5,0 pontos na nota do terceiro bimestre. O trabalho será avaliado de acordo com os critérios:
Esta seção contém algumas dicas de implementação. Use as que achar útil.
Seguem alguns links.