Programa com fila

1. Programa com fila

Israel
baruch

(usa Suse)

Enviado em 28/04/2008 - 12:00h

Pessoal estou tentando fazer um programa e estou tendo várias dificuldades, pois não sou muito bom em programar.

o programa é o seguinte:


Programa que simule uma agencia bancária.
A agencia terá três caixas, sendo que dois destes caixas demoram três minutos para atender um cliente e o outro caixa demora quatro minutos para atender um cliente. Considere que entra um cliente por minuto, e que 20% dos clientes que entram são clientes preferenciais (idosos, gestantes, deficientes, lactantes, etc.). Considere também que o banco fica aberto apenas 4 horas (240 minutos). Neste tempo, continuam entrando clientes, e ao fechar o banco, serão ainda atendidos os clientes que já entraram na fila.
Ao termino do programa, apresente o tempo que o banco esteve aberto, o tempo médio que cada cliente comum demorou na fila e o tempo médio que cada cliente preferencial demorou na fila.
Para a realização do programa, você pode substituir cada minuto do horário de atendimento por um ciclo de loop (de while, do-while, for, etc.). Você também pode calcular a probabilidade de um cliente ser preferencial através da utilização da função rand() em conjunto com a operação de módulo e estipular valores onde corresponde a um tipo de cliente ou outro. Por fim, será necessário construir uma fila que permita trabalhar com prioridades para colocar os clientes que vão entrando na agência.


Alguem pode me dar uma dica de como faz isso?
pelo menos um rumo que eu deva tomar.
Desde já obrigado


  


2. Re: Programa com fila

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 28/04/2008 - 14:08h

Bom, basicamente o problema vai se basear no seu Algoritmo. Uma pergunta, você conhece a estrutura de dados Fila(O primeiro a Entrar é o Último a Sair)? Em caso afirmativo, posta o que já tentou fazer, assim ficaria mais fácil de te ajudar.


Abraços


3. =/

Israel
baruch

(usa Suse)

Enviado em 29/04/2008 - 10:37h

Assim, eu sei muito pouco de estrutura de dados...
pra falar a verdade sou derrotado na programação e estou realmente perdido com este projeto. Esse é apenas um dos exercicios q eu tenho q resolver, os outros 9 eu ja meio que consegui so falta esse.
Se alguem puder me dar pelo menos um rumo, principalmente na parte de estrutura de dados, eu agradeço desde ja.
obrigado


4. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 29/04/2008 - 11:12h

eu fiz um programa igualzinho a este na epoca da faculdade. Acho que em meados de 2001 ou 2002 (faz tempo ja). Basicamente é o seguinte. Você deve fazer a estrutura da fila e fazer um loop pra simular os minutos, caso dentro do loop ainda não tenha passado os 240 minutos do banco (vc faz um contador para ir incrementando os minutos e este será o resultado), então você deve entrar alguem na fila (utilizando o rand para ver se é preferencial). Ai na sequencia vc vai atendendo a fila (com cada um dos caixas tendo o contador de minutos dele e salvando para fazer a média no final). Vc terá de trabalhar com 2 filas, uma normal e outra preferencial.


5. opa

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 29/04/2008 - 11:23h

acho que não pode usar 2 filas não, li denovo o enunciado. É uma fila só controlando as prioridades, ou seja, ao verificar se o cliente é ou não preferencial, caso não seja vai pro fim da fila, caso seja, vai varrendo a fila e entra atras do ultimo preferencial.


6. =/

Israel
baruch

(usa Suse)

Enviado em 02/05/2008 - 13:03h

Eu to tendo problemas com essa fila preferencial...
n to conseguindo implementar ela..
o resto acho q sai mais facilmente
alguem pode me ajudar a implementar essa fila com prioridades?


7. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 14:30h

acho que tem de usar somente uma fila.
Ai a cada vez que rodar o loop, você faz um random de 5, caso de 5 você considerar inserir na preferencial, senão você insere no final da fila.
Para inserir na preferencial, você coloca algum campo identificador da pessoa na fila, se é ou não preferencial. Ai você vai varrendo a fila e insere após este campo. Agora você pode também inserir sempre no começo da fila, mas ai você não vai poder usar o random. Foge tbem um pouco do conceito de fila, que o primeiro que entra é o primeiro que sai.


8. Re: Programa com fila

Geraldo José Ferreira Chagas Júnior
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.


9. Re: Programa com fila

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 04/07/2008 - 09:57h

Um detalhe que parece não está de acordo com o enunciado, é que no algorítmo acima não chegara 20% de preferencial, mas sim, tem 20% de probabilidade de chegada de preferencial.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts