Trabalho 3 - Agendador de reunião

Introdução

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.

Descrição

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.

Desenvolvimento

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.

Execução dos testes

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

Envio do trabalho

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.

Avaliação

Este trabalho vale 5,0 pontos na nota do terceiro bimestre. O trabalho será avaliado de acordo com os critérios:

Dicas

Esta seção contém algumas dicas de implementação. Use as que achar útil.

Seguem alguns links.

Racket

Git