gjr_rj
(usa Debian)
Enviado em 03/07/2008 - 18:35h
Isso me lembrou de poisson.
Vamos lá.
tipo Tfila
preferencial booleano
horaEntrada inteiro
porximo ponteiro para Tfila
anterior ponteiro para Tfila
fim tipo
variaveis
fila ponteiro para Tfila
primeiro Tfila
ultimo Tfila
caixa1 atende booleano
tempoatendecx1 = 0
caixa2 atende booleano
tempoatendecx2 = 0
caixa3 atende booleano
tempoatendecx3 = 0
totalPreferencial=0
tempoTotalPreferencial=0
totalNpreferencial=0
tempoTotalNPreferencial=0
tempoTotal = 0
tempAberto = 240
tempoAtendimento = 0
enquanto tempAberto > 0 ou primeiro <> nulo
cliente = aleatorio (99)
se cliente <= 20
poe na fila (verdade)
senão
Poe na fila (falso)
atendeCaixa1
atendeCaixa2
atendeCaixa3
incremente tempoAtendimento
decrementa tempAberto
fim enquanto
imprime "tempo total atendi mento" tempoAtendimento
imprime "tempo medio espera não preferencial " tempoTotalNPreferencial / totalNpreferencial
imprime "tempo medio espera preferencial " tempoTotalPreferencial / totalpreferencial
fim
--------------------
rotina poe na fila ( preferencial )
temp ponteiro para Tfila
aloca fila
fila.preferencial = preferencial
fila.horaEntrada = tempoAtendimento
se não preferencial
fila.proximo = ultimo
fila.anterior = nulo
ultimo.anterio = fila
ultimo=fila
senão
temp = ultimo
enquanto temp.proximo <> nil ou temp.proximo.preferencial
temp = temp.proximo
fim enquanto
fila.proximo = temp.proximo
temp.proximo.anterior = fila
fila.anterior = temp
fim se
se ultimo = nulo
ultimo = fila
se primeiro = nulo
primeiro = fila
fim rotina
---------------------------------
Rotina atendeCaixa1
se caixa1atende
decrementa (tempoatendecx1)
fim se
se tempoatendecx1 = 0
se primeiro <> nulo
caixa1atende = verdade
tempoatendecx1 = 4
se primeiro.preferencial
tempoTotalPreferencial= tempoTotalPreferencial + (tempoAtendimento - primeiro.horaEntrada)
incrementa (totalPreferencial)
senão
tempoTotalNPreferencial= tempoTotalNPreferencial + (tempoAtendimento - primeiro.horaEntrada)
incrementa (totalNPreferencial)
fim se
primeiro = primeiro.anterior
desaloca (primeiro.proximo)
primeiro.proximo = nulo
senao
caixa1atende = falso
fim se
fim se
fim rotina
Rotina atendeCaixa2
se caixa2atende
decrementa (tempoatendecx2)
fim se
se tempoatendecx2 = 0
se primeiro <> nulo
caixa2atende = verdade
tempoatendecx2 = 4
se primeiro.preferencial
tempoTotalPreferencial= tempoTotalPreferencial + (tempoAtendimento - primeiro.horaEntrada)
incrementa (totalPreferencial)
senão
tempoTotalNPreferencial= tempoTotalNPreferencial + (tempoAtendimento - primeiro.horaEntrada)
incrementa (totalNPreferencial)
fim se
primeiro = primeiro.anterior
desaloca (primeiro.proximo)
primeiro.proximo = nulo
senao
caixa2atende = falso
fim se
fim se
fim rotina
Rotina atendeCaixa3
se caixa3atende
decrementa (tempoatendecx2)
fim se
se tempoatendecx3 = 0
se primeiro <> nulo
caixa3atende = verdade
tempoatendecx3 = 3
se primeiro.preferencial
tempoTotalPreferencial= tempoTotalPreferencial + (tempoAtendimento - primeiro.horaEntrada)
incrementa (totalPreferencial)
senão
tempoTotalNPreferencial= tempoTotalNPreferencial + (tempoAtendimento - primeiro.horaEntrada)
incrementa (totalNPreferencial)
fim se
primeiro = primeiro.anterior
desaloca (primeiro.proximo)
primeiro.proximo = nulo
senao
caixa3atende = falso
fim se
fim se
fim rotina
Agora vou fazer em c e depois posto o fonte. O algorítmo foi só para você ter uma idéia.
Bom, de acordo com o enunciado, acho que é isso que ele está querendo. Deve ter algum erro, pois fiz rápido é só pra te dar uma ajuda inicial.