Gio Postado Maio 4, 2011 Denunciar Share Postado Maio 4, 2011 Estou com um trabalho para fazer e tentei começar. Fiz a agenda e ao tentar fazer o resto simplesmente não sei como fazer.Me ajudem por favor?! Qualquer ajuda ou conselho vale muito. O trabalho é o seguinte:A maioria dos professores do DCC se sente sobrecarregada com encargos e reuniões eacaba por não conseguir cumprir todos os seus compromissos. Tendo em vista o aumentoesperado dos encargos didáticos no próximo ano, devido ao programa REUNI, oDepartamento resolveu desenvolver um sistema automatizado de gerenciamento detempo, e, para tanto, contrata você para fazê-lo. A especificação do sistema segue abaixo.Tipos Abstrato de DadosVocê deve implementar três tipos abstratos de dados, definidos a seguir:1. CompromissoA agenda de um professor pode ter vários tipos de compromissos, definidos a partir deum identificador numérico de tipo bem como informações adicionais associadas. Osistema a ser desenvolvido deve suportar 5 tipos de compromissos:• AULA: aulas para turmas de graduação, pós-graduação ou especialização. Estecompromisso tem associado as seguintes informações: data, hora, duração (emminutos) e nome da disciplina ministrada.• ORIENTAÇÃO: orientação de alunos. Este compromisso possui uma data, hora,duração (em minutos) e nome do aluno orientado.• REUNIÃO: reuniões do departamento. Inclui data, hora, duração (em minutos) enome da reunião (ex: COLEGIADO DA GRADUAÇÃO ou COPEQ)• EVENTO: participação em eventos técnicos como congressos e conferências.Possui data, hora, duração (em dias), nome do evento. Você pode assumir que umevento começa as 0hs do dia inicial e terminam as 24hs do último dia.• COMPROMISSO PARTICULAR: qualquer compromisso particular, que possuidata , hora, duração (em minutos) e razão (ex: médico).Você pode assumir que nome de disciplina, nome de aluno, nome de reunião, nome deevento e razão de compromisso particular são cadeias de caracteres, todas com umtamanho máximo M = 100.Cada compromisso possui também um identificador numérico único, que servirá pararealização de alterações após a criação do mesmo.Cada tipo de compromisso tem um grau de prioridade que, por default, deve ser:AULA 2 ORIENTAÇÃO 1 REUNIÃO 4EVENTO 3 COMPROMISSO PARTICULAR 2Um professor deve poder alterar (aumentar ou diminuir) o grau de prioridade de qualquercompromisso. Os graus de prioridade deverão ser utilizados para definir quaiscompromissos serão cumpridos e quais deverão ser cancelados. Se dois compromissostêm conflito de horário, aquele com a maior prioridade deverá ser cumprido (Vide regrasde desempate abaixo).Um professor ainda poderá definir se um dado compromisso pode ser adiado ou não,definindo o campo adiável apropriadamente. Note que AULA e EVENTO não podem seradiados.Em caso de conflito, se o compromisso com menor prioridade for adiável, ele seráadiado. Caso contrário, ele terá que ser cancelado (veja descrição abaixo). Neste caso,cada compromisso tem também um campo status associado informando se ele poderá sercumprido, se ele deverá ser cancelado ou adiado. Em outras palavras, este campo podeassumir um dos código (valores numéricos) “A SER CUMPRIDO”, “ADIADO” ou“CANCELADO”.Um compromisso deve suportar, no mínimo, as seguintes operações:• inicializaCompromisso(tipo, data, hora, duração e nome): inicializa umcompromisso com os valores informados. Esta função deve atribuir umidentificador numérico único para o compromisso e retorná-lo como resultado.Além disto, no momento de criação, todo compromisso deve poder ser cumpridoe não pode ser adiado. Logo, o status de um compromisso recém-criado serásempre “A SER CUMPRIDO”, e o campo adiável deverá ser inicializado comFALSE.• alteraPrioridade(novaPri): altera a prioridade de um compromisso com um novovalor passado como parâmetro.• retornaPrioridade(): retorna a prioridade de um compromisso.• eAdiavel(flag): define se compromisso passado como parâmetro é adiável ounão. O parâmetro flag deve ser TRUE se compromisso é adiável e FALSE casocontrário.• temConflito(compromisso1, compromisso2): esta operação deve retornar se há ounão conflito nos horários dos dois compromissos passados como parâmetros.• atribuiStatus(flag): determina se o compromisso poderá ser cumprido, se eledeverá ser cancelado ou adiado. O parâmetro flag deve conter um dos três valores“A SER CUMPRIDO”, “ADIADO” ou “CANCELADO”.• retornaStatus(): retorna se compromisso poderá ser cumprido, se ele deverá sercancelado ou adiado.• imprimeCompromisso(): imprime todas as informações associadas a umcompromisso seguindo a ordem identificador, tipo, data, hora, duração, nome dedisciplina/aluno/reunião/evento (ou razão), adiável, status. Você deve imprimir otipo na forma de cadeia de caracteres (ex: REUNIÃO) e não o valor numérico.2. AgendaO sistema sendo desenvolvido deve permitir a criação de agendas, uma para cadaprofessor.Assim, cada agenda deve conter• um identificador único do professor,• o nome do professor,• o ano,• uma sequência de eventos. Você pode assumir um número máximo, pré-definido,de eventos no ano em cada agenda.Um professor deve ser capaz de, no mínimo, realizar as seguintes operações com suaagenda:• criaAgenda(idProf, nome, ano): cria uma nova agenda para o professor comidentificador e nome informados. O ano também é passado como parâmetro. Estaoperação deve criar uma agenda vazia, sem nenhum compromisso.• recuperaAgenda(data): recebe uma data, e retorna uma mensagem na tela com onome do professor, o ano e o número de compromissos na agenda com data apósa data fornecida.• insereCompromisso(tipo, data, hora, duração, nome): recebe as informaçõesassociadas de um novo compromisso, que deve ser inicializado (chamando aoperação respectiva no TAD Compromisso) e inserido na agenda. A operaçãodeve imprimir uma mensagem informando sucesso ou falha. Em caso de sucesso,o identificador do compromisso deve ser impresso.• removeCompromisso(idCompromisso): recebe o identificador de umcompromisso. Esta operação deve remover o ompromisso identificado da agendado professor, caso ele exista.• imprimeAgenda(): esta operação deve imprimir todos os compromissosagendados do professor, ordenados cronologicamente pelo instante de início. Emcaso de empate, deve-se imprimir primeiro os compromissos com maiorprioridade. Se ainda houver empate, deve-se respeitar a ordem de impressão:EVENTO, REUNIÃO, AULA, ORIENTAÇÃO, COMPROMISSOPARTICULAR.• resolveConflito(): esta operação deve visitar toda a agenda a procura de conflitosentre compromissos. Cada conflito encontrado deve ser resolvido a partir daatribuição de status de CANCELADO ou ADIADO para alguns compromissos.A resolução de conflitos deve seguir a ordem de prioridade dos eventos. Em casode empate, deve-se priorizar compromissos que iniciam primeiro. Caso ainda hajaempate, deve-se seguir a mesma ordem de impressão, informada acima.• retornaNAdiamentos(): retorna o número total de compromissos com status“ADIADO”.• retornaNCancelamentos(): retorna ao número total de compromissos com status“CANCELADO”.• retornaNCompromissos(): retorna o número total de eventos na agenda.• imprimeCompromissosAdiados(): esta operação deve imprimir todos oscompromissos agendados que foram adiados, seguindo a mesma ordem daoperação imprimeAgenda.• imprimeCompromissosCancelados(): esta operação deve imprimir todos oscompromissos agendados que foram cancelados devido a conflitos, seguindo amesma ordem da operação imprimeAgenda.• imprimeCompromissosACumprir(): esta operação deve imprimir todos oscompromissos que ainda pode ser cumpridos, seguindo a mesma ordem daoperação imprimeAgenda.Note que a declaração exata das operações listadas tanto para o TAD Compromissoquanto para o TAD Agenda fica a critério dos alunos. Lista-se acima apenas asfuncionalidades mínimas esperadas bem como parâmetros essenciais para suasexecuções. Caso o aluno sinta necessidade de criar novas operações, ou de modificar alista de parâmetros das apresentadas, as modificações deverão ser discutidas e justificadasno relatório.Sistema de Gerenciamento de TempoO sistema de gerenciamento de tempo a ser desenvolvido deve permitir a criação,atualização e visualização das agendas de todos os P = 60 professores do departamento.O sistema deve ser interativo permitindo que o usuário (isto é, um professor) defina qualoperação deseja realizar em cada interação. Em outras palavras, o sistema deve fornecerum menu para que o usuário interaja com o sistema e eventualmente saia do mesmo.Escolhida a operação, o sistema deverá solicitar que o usuário entre com as informaçõesnecessárias para a sua realização e imprima os resultados (se houver) na tela.O menu não precisa ser sofisticado, bastando uma interface ASCII simples com códigode escolha de cada operação que o usuário pode fazer em cada instante. Testes decorretude e de sanidade deverão ser realizados em cada operação.O sistema deve poder ser utilizar por todos os P professores, embora o acesso sejasequencial.Apresente uma descrição do TAD, com as estruturas de dados efunções/procedimentos implementados. Apresente também a ordem de complexidade decada função ou procedimento implementado.As regras de submissão estão no site da disciplina. Em particular, atente para:• O programa deve ser organizado em, no mínimo, 3 módulos: compromisso.c(compromisso.h), agenda.c (agenda.h) e main.c• O programa deve estar bem indentado e comentado• O programa não deve fazer uso de comando goto nem de variáveis globais• Caso apareçam números fixos no código, estes devem ser definidos comoconstantes.• O trabalho é individual. Trabalhos copiados serão penalizados conformeinformado em sala.ATENÇÃO: Soluções que não correspondam à implementação de um Tipo Abstrato deDados serão duramente penalizadas por não atenderem a especificação. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 4, 2011 Denunciar Share Postado Maio 4, 2011 Saudações,Qual seria a sua dúvida?Abraços,William Rodrigues. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gio Postado Maio 4, 2011 Autor Denunciar Share Postado Maio 4, 2011 Ola,bom, tirando a parte da agenda eu infelizmente to com dúvida em praticamente tudo.Eu cheguei a criar as strcts de AULA, COMPROMISSO, etc, mas não to conseguindo trabalhar isso dentro da ideia do gerenciador de tempo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 William Rodrigues Postado Maio 6, 2011 Denunciar Share Postado Maio 6, 2011 Saudações,Poste como está seu código e a sua dúvida sobre o que está tentando fazer, pois esse trabalho é grande e fica praticamente impossível te ajudar sem uma dúvida especifica.Abraços,William Rodrigues. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 N a T a N Postado Maio 6, 2011 Denunciar Share Postado Maio 6, 2011 Gio, eu estava fazendo com lista, mas estava dando muito pau, ai troquei para vetor e está indo de boa... Tente usar vetor ao invés de lista...PS: 10 pontos por esse trabalho, está saíndo caro... Sorte que as provas da Poliana não são tão difíceis. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Gio
Estou com um trabalho para fazer e tentei começar. Fiz a agenda e ao tentar fazer o resto simplesmente não sei como fazer.
Me ajudem por favor?! Qualquer ajuda ou conselho vale muito.
O trabalho é o seguinte:
A maioria dos professores do DCC se sente sobrecarregada com encargos e reuniões e
acaba por não conseguir cumprir todos os seus compromissos. Tendo em vista o aumento
esperado dos encargos didáticos no próximo ano, devido ao programa REUNI, o
Departamento resolveu desenvolver um sistema automatizado de gerenciamento de
tempo, e, para tanto, contrata você para fazê-lo. A especificação do sistema segue abaixo.
Tipos Abstrato de Dados
Você deve implementar três tipos abstratos de dados, definidos a seguir:
1. Compromisso
A agenda de um professor pode ter vários tipos de compromissos, definidos a partir de
um identificador numérico de tipo bem como informações adicionais associadas. O
sistema a ser desenvolvido deve suportar 5 tipos de compromissos:
• AULA: aulas para turmas de graduação, pós-graduação ou especialização. Este
compromisso tem associado as seguintes informações: data, hora, duração (em
minutos) e nome da disciplina ministrada.
• ORIENTAÇÃO: orientação de alunos. Este compromisso possui uma data, hora,
duração (em minutos) e nome do aluno orientado.
• REUNIÃO: reuniões do departamento. Inclui data, hora, duração (em minutos) e
nome da reunião (ex: COLEGIADO DA GRADUAÇÃO ou COPEQ)
• EVENTO: participação em eventos técnicos como congressos e conferências.
Possui data, hora, duração (em dias), nome do evento. Você pode assumir que um
evento começa as 0hs do dia inicial e terminam as 24hs do último dia.
• COMPROMISSO PARTICULAR: qualquer compromisso particular, que possui
data , hora, duração (em minutos) e razão (ex: médico).
Você pode assumir que nome de disciplina, nome de aluno, nome de reunião, nome de
evento e razão de compromisso particular são cadeias de caracteres, todas com um
tamanho máximo M = 100.
Cada compromisso possui também um identificador numérico único, que servirá para
realização de alterações após a criação do mesmo.
Cada tipo de compromisso tem um grau de prioridade que, por default, deve ser:
AULA 2 ORIENTAÇÃO 1 REUNIÃO 4
EVENTO 3 COMPROMISSO PARTICULAR 2
Um professor deve poder alterar (aumentar ou diminuir) o grau de prioridade de qualquer
compromisso. Os graus de prioridade deverão ser utilizados para definir quais
compromissos serão cumpridos e quais deverão ser cancelados. Se dois compromissos
têm conflito de horário, aquele com a maior prioridade deverá ser cumprido (Vide regras
de desempate abaixo).
Um professor ainda poderá definir se um dado compromisso pode ser adiado ou não,
definindo o campo adiável apropriadamente. Note que AULA e EVENTO não podem ser
adiados.
Em caso de conflito, se o compromisso com menor prioridade for adiável, ele será
adiado. Caso contrário, ele terá que ser cancelado (veja descrição abaixo). Neste caso,
cada compromisso tem também um campo status associado informando se ele poderá ser
cumprido, se ele deverá ser cancelado ou adiado. Em outras palavras, este campo pode
assumir um dos código (valores numéricos) “A SER CUMPRIDO”, “ADIADO” ou
“CANCELADO”.
Um compromisso deve suportar, no mínimo, as seguintes operações:
• inicializaCompromisso(tipo, data, hora, duração e nome): inicializa um
compromisso com os valores informados. Esta função deve atribuir um
identificador numérico único para o compromisso e retorná-lo como resultado.
Além disto, no momento de criação, todo compromisso deve poder ser cumprido
e não pode ser adiado. Logo, o status de um compromisso recém-criado será
sempre “A SER CUMPRIDO”, e o campo adiável deverá ser inicializado com
FALSE.
• alteraPrioridade(novaPri): altera a prioridade de um compromisso com um novo
valor passado como parâmetro.
• retornaPrioridade(): retorna a prioridade de um compromisso.
• eAdiavel(flag): define se compromisso passado como parâmetro é adiável ou
não. O parâmetro flag deve ser TRUE se compromisso é adiável e FALSE caso
contrário.
• temConflito(compromisso1, compromisso2): esta operação deve retornar se há ou
não conflito nos horários dos dois compromissos passados como parâmetros.
• atribuiStatus(flag): determina se o compromisso poderá ser cumprido, se ele
deverá ser cancelado ou adiado. O parâmetro flag deve conter um dos três valores
“A SER CUMPRIDO”, “ADIADO” ou “CANCELADO”.
• retornaStatus(): retorna se compromisso poderá ser cumprido, se ele deverá ser
cancelado ou adiado.
• imprimeCompromisso(): imprime todas as informações associadas a um
compromisso seguindo a ordem identificador, tipo, data, hora, duração, nome de
disciplina/aluno/reunião/evento (ou razão), adiável, status. Você deve imprimir o
tipo na forma de cadeia de caracteres (ex: REUNIÃO) e não o valor numérico.
2. Agenda
O sistema sendo desenvolvido deve permitir a criação de agendas, uma para cada
professor.
Assim, cada agenda deve conter
• um identificador único do professor,
• o nome do professor,
• o ano,
• uma sequência de eventos. Você pode assumir um número máximo, pré-definido,
de eventos no ano em cada agenda.
Um professor deve ser capaz de, no mínimo, realizar as seguintes operações com sua
agenda:
• criaAgenda(idProf, nome, ano): cria uma nova agenda para o professor com
identificador e nome informados. O ano também é passado como parâmetro. Esta
operação deve criar uma agenda vazia, sem nenhum compromisso.
• recuperaAgenda(data): recebe uma data, e retorna uma mensagem na tela com o
nome do professor, o ano e o número de compromissos na agenda com data após
a data fornecida.
• insereCompromisso(tipo, data, hora, duração, nome): recebe as informações
associadas de um novo compromisso, que deve ser inicializado (chamando a
operação respectiva no TAD Compromisso) e inserido na agenda. A operação
deve imprimir uma mensagem informando sucesso ou falha. Em caso de sucesso,
o identificador do compromisso deve ser impresso.
• removeCompromisso(idCompromisso): recebe o identificador de um
compromisso. Esta operação deve remover o ompromisso identificado da agenda
do professor, caso ele exista.
• imprimeAgenda(): esta operação deve imprimir todos os compromissos
agendados do professor, ordenados cronologicamente pelo instante de início. Em
caso de empate, deve-se imprimir primeiro os compromissos com maior
prioridade. Se ainda houver empate, deve-se respeitar a ordem de impressão:
EVENTO, REUNIÃO, AULA, ORIENTAÇÃO, COMPROMISSO
PARTICULAR.
• resolveConflito(): esta operação deve visitar toda a agenda a procura de conflitos
entre compromissos. Cada conflito encontrado deve ser resolvido a partir da
atribuição de status de CANCELADO ou ADIADO para alguns compromissos.
A resolução de conflitos deve seguir a ordem de prioridade dos eventos. Em caso
de empate, deve-se priorizar compromissos que iniciam primeiro. Caso ainda haja
empate, deve-se seguir a mesma ordem de impressão, informada acima.
• retornaNAdiamentos(): retorna o número total de compromissos com status
“ADIADO”.
• retornaNCancelamentos(): retorna ao número total de compromissos com status
“CANCELADO”.
• retornaNCompromissos(): retorna o número total de eventos na agenda.
• imprimeCompromissosAdiados(): esta operação deve imprimir todos os
compromissos agendados que foram adiados, seguindo a mesma ordem da
operação imprimeAgenda.
• imprimeCompromissosCancelados(): esta operação deve imprimir todos os
compromissos agendados que foram cancelados devido a conflitos, seguindo a
mesma ordem da operação imprimeAgenda.
• imprimeCompromissosACumprir(): esta operação deve imprimir todos os
compromissos que ainda pode ser cumpridos, seguindo a mesma ordem da
operação imprimeAgenda.
Note que a declaração exata das operações listadas tanto para o TAD Compromisso
quanto para o TAD Agenda fica a critério dos alunos. Lista-se acima apenas as
funcionalidades mínimas esperadas bem como parâmetros essenciais para suas
execuções. Caso o aluno sinta necessidade de criar novas operações, ou de modificar a
lista de parâmetros das apresentadas, as modificações deverão ser discutidas e justificadas
no relatório.
Sistema de Gerenciamento de Tempo
O sistema de gerenciamento de tempo a ser desenvolvido deve permitir a criação,
atualização e visualização das agendas de todos os P = 60 professores do departamento.
O sistema deve ser interativo permitindo que o usuário (isto é, um professor) defina qual
operação deseja realizar em cada interação. Em outras palavras, o sistema deve fornecer
um menu para que o usuário interaja com o sistema e eventualmente saia do mesmo.
Escolhida a operação, o sistema deverá solicitar que o usuário entre com as informações
necessárias para a sua realização e imprima os resultados (se houver) na tela.
O menu não precisa ser sofisticado, bastando uma interface ASCII simples com código
de escolha de cada operação que o usuário pode fazer em cada instante. Testes de
corretude e de sanidade deverão ser realizados em cada operação.
O sistema deve poder ser utilizar por todos os P professores, embora o acesso seja
sequencial.
Apresente uma descrição do TAD, com as estruturas de dados e
funções/procedimentos implementados. Apresente também a ordem de complexidade de
cada função ou procedimento implementado.
As regras de submissão estão no site da disciplina. Em particular, atente para:
• O programa deve ser organizado em, no mínimo, 3 módulos: compromisso.c
(compromisso.h), agenda.c (agenda.h) e main.c
• O programa deve estar bem indentado e comentado
• O programa não deve fazer uso de comando goto nem de variáveis globais
• Caso apareçam números fixos no código, estes devem ser definidos como
constantes.
• O trabalho é individual. Trabalhos copiados serão penalizados conforme
informado em sala.
ATENÇÃO: Soluções que não correspondam à implementação de um Tipo Abstrato de
Dados serão duramente penalizadas por não atenderem a especificação.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.