Fila - caixa
#include
#define NUM_CAB 3
#define MAX(x,y) (((x) > (y))? (x) : (y))//MAX define uma expressao se x > que y então x, senão y.
typedef struct fila
{
int numero; int t2; int tsaida; struct fila *prox; struct fila *prev;
} fila;
int t1, t3, NumCliente; float TamMedio; //tamanho médio da fila. fila *Inic[NUM_CAB],*Fim[NUM_CAB];
int random(int n)
{
return rand() % n;
}
void tempo_de_espera(int n)
{
if (Inic[n] == NULL) t3 = 0; else t3 = 1 + random(10); }
//cliente entra na fila void entrar_na_fila(int n)
{
fila *p;
NumCliente++; p = (fila *)calloc(1,sizeof(fila));
p->numero = NumCliente; p->t2 = 3 + random(6);
if (Inic[n] == NULL) Inic[n] = p; if (Fim[n] != NULL) Fim[n]->prox = p; p->prev = Fim[n]; p->prox = NULL; Fim[n] = p;
// Calculo do tempo de saida if (p->prev != NULL) p->tsaida = MAX(t1,p->prev->tsaida) + p->t2; else p->tsaida = t1 + p->t2 + t3;
}
//cliente sai da fila void sair_da_fila(int n)
{
Inic[n] = Inic[n]->prox;
}
int tamanho_fila(int n)
{
int t; fila *p; t = 0; p = Inic[n]; while (p != NULL) { t++; p = p->prox; } return t;
}
int menor_fila()
{
int i,t,nfila,tfila; nfila = 0; tfila = tamanho_fila(0); for (i = 1; i < NUM_CAB; i++) { t = tamanho_fila(i); if (t < tfila) { nfila = i; tfila = t; } } return nfila;
}
void simular(int minutos)
{
int i,nf,linha,chegada; chegada = 0;
printf("+-------+---------+------+--------+--------+-------+\n"); printf("| Tempo | Cliente | Fila | Espera | Atend. | Saida |\n"); printf("+-------+---------+------+--------+--------+-------+\n");
for (t1 = 1; t1 t2,Fim[nf]->tsaida); linha = 1; chegada = 0; } if (linha == 0) printf("| | | |