Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin (daniel.martin@ufabc.edu.br) Aula 7 (laboratório)
Exercício de Laboratório Neste exercício você deverá praticar o uso da estrutura de dados 'Fila' O objetivo é fazer um programa em C que simula o funcionamento de uma fila de banco. Seu programa deve ter duas fases: Fase 1: chegada dos clientes na fila do caixa Fase 2: atendimento dos clientes pelos caixas
Fase 1: chegada dos clientes Cada cliente que chega no banco tem um problema diferente para resolver Cada cliente demorará um tempo diferente para ser atendido Você deve ler da entrada padrão (i.e. usando scanf) uma seqüência de números inteiros positivos e colocá-los numa fila de inteiros, até a leitura de um número menor ou igual a zero (que não deve ser colocado na fila). Cada número da fila é o número de minutos que o atendimento àquele cliente levará
Fase 2: atendimento dos clientes Na fase 2 você deve simular o atendimento dos clientes por três caixas c1, c2 e c3 Use uma variável tempo (inicialmente com valor 0) No tempo 0, todos os caixas estão livres e O caixa 1 chama o primeiro da fila O caixa 2 chama o primeiro da fila (que andou) O caixa 3 chama o primeiro da fila (que andou)
Fase 2: atendimento dos clientes Exemplo: digamos que a fila contenha os números 4 2 5 1 3 6 12 5 nesta ordem Então, no tempo 0, temos os eventos No tempo 0 o caixa 1 chama 4 (c1 = 4) No tempo 0 o caixa 2 chama 2 (c2 = 2) No tempo 0 o caixa 3 chama 5 (c3 = 5)
Fase 2: atendimento dos clientes No tempo 1, cada cliente já está sendo por 1 minuto, então temos (c1 = 3) (c2 = 1) (c3 = 4) Nenhum evento ocorreu
Fase 2: atendimento dos clientes No tempo 2, temos (c1 = 2) (c2 = 0) caixa se tornou livre (c3 = 3) Como o caixa dois está livre, ele já chama o próximo cliente. Temos o evento: No tempo 2 o caixa 2 chama 1 (c2 = 1)
Fase 2: atendimento dos clientes No tempo 3 temos (c1 = 1) (c2 = 0) caixa livre novamente (c3 = 2) Como o caixa 2 está livre novamente, ele chama o próximo cliente. Temos o evento: No tempo 2 o caixa 2 chama 3 (c2 = 3)
Fase 2: atendimento dos clientes No tempo 4, temos (c1 = 0) caixa se tornou livre (c2 = 2) (c3 = 1) Caixa 1 chama próximo cliente gerando o evento: No tempo 4 o caixa 1 chama 6 (c1 = 6)
Fase 2: atendimento dos clientes No tempo 5, temos (c1 = 5) (c2 = 1) (c3 = 0) caixa se tornou livre Caixa 3 chama próximo cliente gerando o evento: No tempo 5 o caixa 3 chama 12 (c3 = 12)
Fase 2: atendimento dos clientes No tempo 6, temos (c1 = 4) (c2 = 0) caixa se tornou livre (c3 = 11) Caixa 2 chama próximo cliente gerando o evento: No tempo 6 o caixa 2 chama 5 (c2 = 5) Neste momento a fila está vazia, e a simulação terminou
Exercício de Laboratório A saída do seu programa deve ser justamente uma listagem dos eventos (só uma lista dos eventos, um por linha, e nada mais) Você não deve imprimir o valor de c1, c2 e c3 Você NÃO deve simular o atendimento em tempo real (seu programa deve rodar em alguns milisegundos!)
Exercício de Laboratório Exemplo: Entrada: 4 2 5 1 3 6 12 5 Saída: No tempo 0 o caixa 1 chama 4 No tempo 0 o caixa 2 chama 2 No tempo 0 o caixa 3 chama 5 No tempo 2 o caixa 2 chama 1 No tempo 2 o caixa 2 chama 3 No tempo 4 o caixa 1 chama 6 No tempo 5 o caixa 3 chama 12 No tempo 6 o caixa 2 chama 5
Instruções Observe as instruções atentamente: Você deve usar o Módulo Fila disponível no site da disciplina Você deve usar os arquivo fila.h, fila.c e item.h que estão contidos no fila.tar.gz Você não tem permissão para modificar os arquivos fila.h nem fila.c e deve apenas utilizá-los em seu programa
Instruções Em seu programa você deverá usar uma fila de inteiros declarada como struct s_fila F; Para tanto, deve modificar o arquivo item.h trocando a linha typedef char item; por typedef int item;
Instruções Você não pode declarar/alocar/usar nenhum vetor em seu programa!!! Você pode apenas usar as funções da interface fila.h Lembre-se de chamar inicializa_fila(&f, 1000); antes de usar outras funções de fila.h
Instruções Entregar somente o seu arquivo main.c (não é para entregar nem fila.h nem fila.c nem item.h) Eu vou usar o meu fila.h e fila.c para compilar seu programa (e tb o meu item.h modificado) Entregar até meia noite de domingo 04/03 Entrega posterior fica com zero O assunto do e-mail deve ser AED1-EL3