[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: Muitas perguntas!
Marcos Lemos writes:
> Yoshi,
>
> Sobre a seguinte passagem, gostaria de saber se minhas interpretações
> estão corretas:
>
> int k;
> comeco = fim = NULL;
> for (k = 1; k <= n; k++)
> if (el (k)->g_entr == 0)
> if (comeco == NULL)
> fim = comeco = el (k);
> else
> {
> fim->prox_fila = el (k);
> fim = el (k);
> }
> }
Tenho a impressão de que você está tentando ler o codigo sem olhar a
documentacao que vem nas versões completas... como o ex11.dvi, ex11.ps,
ex11.pdf (ou mesmo o ex11.w). Está dito, na seção 12, que comeco e fim
correspondem a uma fila que guardará as fontes em cada instante. O codigo
acima simplesmente insere el(k) nesta fila, caso g_entr se tornou 0.
> Nessa parte, COMECO e FIM comecam como NULL e o programa analisa o
> g_entr de cada um dos dados contidos em ELS. Se o no inicio da analise o
> COMECO estiver vazio, entao a tarefa e inserida tanto em FIM como em
> COMECO, senao o elemento analisado sera colocado no PROX_FILA do
> elemento que se encontra em fim (ou seja, seja será um sucessor do
> elemento ue já consta em FIM (???) ). Logo em seguida, esta tarefa e
> inserida dentro de FIM.
> Digamos que eu tenha a seguinte entrada:
> 5
> 1 2
> 1 3
> 2 3
> 3 4
> 5 4
> Podemos perceber que 1 e 5 possuem g_entr=0... Já posso interpretar
> nesta parte do programa que já temos duas rodadas em execução (uma
> máquian executa 1, e outra , executa 5)
Não... estamos chamando de rodada a execução simultânea de tarefas. As
tarefas 1 e 5 podem ser executadas em uma mesma rodada (na primeira rodada).
> Então, inicialmente, a tarefa 1 seria incluída em COMECO e tambem em
> FIM ? Já a tarefa 5 (cujo g_entr=0) seria colocada como sucessora de 1
> dentro da estrutura FIM ?
Aqui voce precisa recapitular como implementamos filas usando listas ligadas,
como visto nas aulas de 1/9 e 3/9.
> Seguindo com o mesmo exemplo
> while (comeco)
> {
> struct sucessor *ptr, *tmp;
> ptr = comeco->topo_suc;
>
> PTR estaria apontando para a lista de sucessores da tarefa que se
> encontra em COMECO (logo estaria apontando para 2, que estaria apontando
> para 3 (???)). É isso ?
>
> while (ptr)
> {
> ptr->id->g_entr--;
> if (ptr->id->g_entr == 0)
> {
> ptr->id->prox_fila = NULL;
> fim->prox_fila = ptr->id;
> fim = ptr->id;
> }
>
>
> tmp = ptr;
> ptr = ptr->prox_suc;
> free (tmp);
> }
>
> Bem, gostaria de saber se, pelos menos, estou no caminho certo... Na
> verdade, presumo que, no EP, basta incrementar este programa para que
> ele faça a contagem de rodadas,
O ex11 não faz, por si só, a decomposição das tarefas em rodadas
concretamente, embora esteja muito próximo de fazê-lo.
> portanto o seu completo entedimento é
> fundamental, não e verdade ?
É. Boa sorte, Yoshi
> Lemos