/* Programa que implementa o Tipo Abstrato de Dados Fila em Vetor * Objetivo: organizar clientes em uma estrutura de dados que ilustra o funcionamento real de uma fila * Restricoes: a fila consiste em clientes, pois estah adaptado para este programa * Observacoes: MAXF estah declarado como constante em utils.h e tem o valor igual a 100 * o tipo bool estah definido em utils.h e consiste em um int para representar valores booleanos * * Autores: Bruno Freitas Tissei e Felipe Shi Iu Wu * Disciplina: Algoritmos e Estrutura de Dados II * Entrega: 20/11/2015 */ #include "fila.h" // inicia a fila void inicFila(tipoFila *fila) { imprimeLog("Iniciei a Fila, que pode ter no maximo 100 elementos"); fila->frente = fila->fim = 0; } // verifica se a fila estah vazia (vazia -> true) bool vaziaFila(tipoFila *fila) { return fila->frente == fila->fim; } // insere elemento "cliente" na fila. Se estiver cheia, apenas informa tal condicao ao usuario e // imprime no log bool enfileira(tipoFila *fila, cliente c) { if ((fila->fim + 1) % MAXF == fila->frente) { printf("Loja cheia, volte mais tarde.\n"); sprintf(straux, "ERRO: impossivel enfileirar elemento cliente = (%s, %.2f), Fila cheia!", c.nome, c.gastoTotal); imprimeLog(straux); return false; } else { sprintf(straux, "Enfileirei elemento cliente = (%s, %.2f)", c.nome, c.gastoTotal); imprimeLog(straux); fila->vetor[fila->fim] = c; fila->fim = (fila->fim + 1) % MAXF; return true; } } // desenfileira da fila e retorna o cliente que foi desenfileirado. Se estiver vazia, apenas informa tal // condicao ao usuario e imprime no log cliente desenfileira(tipoFila *fila) { cliente aux; if (vaziaFila(fila)) { printf("Caixa livre.\n"); imprimeLog("ERRO: impossivel desenfileirar, Fila Vazia!"); } else { aux = fila->vetor[fila->frente]; sprintf(straux, "Desenfileirei o elemento cliente = (%s, %.2f)", aux.nome, aux.gastoTotal); imprimeLog(straux); fila->frente = (fila->frente + 1) % MAXF; return aux; } } // imprime a fila da frente ateh o final void imprimeFila(tipoFila *fila) { int i = fila->frente; if (vaziaFila(fila)) { printf("Caixa livre.\n"); imprimeLog("Veja a Fila: [ ]"); } else { imprimeLog("Veja a Fila: ["); while (i != fila->fim) { sprintf(straux, "\t(%s, %.2f)", fila->vetor[i].nome, fila->vetor[i].gastoTotal); imprimeLog(straux); printf("Nome: %s | Gasto total: R$%.2f\n", fila->vetor[i].nome, fila->vetor[i].gastoTotal); i = (i + 1) % MAXF; } imprimeLog("]"); } }