Problema 3


Notas


Questão 1

[100% - 20 valores]

Desenvolva um embrião para o trabalho da cadeira consistindo numa classe Tarefa (modelada como contendo apenas uma duração) e numa classe Projecto.  Deverá ser possível introduzir tarefas num projecto bem como as respectivas dependências.  As tarefas poderão, no que diz respeito à classe Projecto, ser identificadas por etiquetas (std::string).  Deverá ainda ser possível minimizar o tempo de execução do projecto e mostrar o planeamento obtido no ecrã.  Pode usar as listas já desenvolvidas (mas com o tipo de que Item é sinónimo alterado convenientemente) para guardar a informação acerca das tarefas.  Procure em lista.cpp (lista.cpp para Windows), lista.h (lista.h para Windows), lista_ligada.cpp (lista_ligada.cpp para Windows) e lista_ligada.h (lista_ligada.h para Windows).

Escreva um programa que, usando as classes desenvolvidas, leia informação acerca das tarefas de um projecto a partir de um ficheiro com o seguinte formato:

n_t : o número de tarefas, sendo o formato das linhas seguintes repetido n_t vezes:
    etiqueta : a etiqueta da tarefa
    duração : a duração da tarefa
n_d : o número de dependências entre tarefas, sendo o formato das linhas seguintes repetido n_d vezes:
    etiqueta_sucessora : etiqueta da tarefa sucessora na dependência
    etiqueta_predecessora : etiqueta da tarefa predecessora na dependência
e escreva no ecrã o respectivo planeamento mínimo, consistindo numa listagem das tarefas contendo:
  1. A sua etiqueta.
  2. A sua duração.
  3. O seu começo e fim o mais cedo possível.
  4. O seu começo e fim o mais tarde possível.
  5. A sua folga (se a folga for zero a tarefa deverá ser identificada como crítica).
  6. A lista das etiquetas das suas tarefas predecessoras (directas).
A listagem deve começar por indicar qual a duração mínima do projecto.

Por exemplo, dado o seguinte ficheiro de entrada:

9
A
2
B
1
C
5
D
4
E
3
F
2
G
3
H
2
I
2
9
C
A
D
A
E
B
F
C
G
D
H
E
H
F
H
G
I
G
o programa deverá mostrar:
0-11
A(2): 0-2, 0-2: crítica:
B(1): 0-1, 5-6: 5:
C(5): 2-7, 2-7: crítica: A
D(4): 2-6, 2-6: crítica: A
E(3): 1-4, 6-9: 5: B
F(2): 7-9, 7-9: crítica: C
G(3): 6-9, 6-9: crítica: D
H(2): 9-11, 9-11: crítica: E F G
I(2): 9-11, 9-11: crítica: G
Use as sugestões feitas no enunciado do trabalho final da disciplina.