Ir ao conteúdo
  • Cadastre-se

Filas de restaurante


otaviohpf

Posts recomendados

Boa noite amigos, tenho um código para terminar que consiste em gerenciar as filas de um restaurante. A cada espaço de tempo chegam dois clientes na fila do caixa, um sai da fila do caixa e entra na fila para pegar a bandeja, um sai da fila da bandeja e segue para servir os alimentos e um serve a primeira guarnição de alimento (serão 4 guarnições, aonde cada uma leva um espaço de tempo para ser servida). A cada 12 espaços de tempo 10 bandejas são recolocadas na pilha de bandejas, portanto se o primeiro da fila da bandeja chegar chegar em um momento aonde não tenham bandejas disponíveis ele deve esperar até que sejam recolocadas as bandejas.

Fiz boa parte, mas acho que acabei confundindo um pouco em alguns momentos. Gostaria da ajuda de vocês para ver o que pode estar errado. valeu !

 

main.c

#include <stdio.h>
#include <stdlib.h>
#include "FilaDin.h"
int main(){
    struct clientes cliente;

    int tempo=20 //Tempo geral de análise
    int tbandejas=0;//Tempo entre uma reposiçao e outra das bandejas
    int tmedio=0;//Tempo médio
    int nclientes=0;//Marca o número de clientes atendidos
    Fila* filaDoCaixa = cria_Fila();
    Fila* filaDaBandeja = cria_Fila();
    Fila* filaDosAlimentos = cria_Fila();
    //Faz Pilha Bandejas //Tamanho máximo de 30 bandejas

    while(tempo>=0){

        insere_Fila(filaDoCaixa, cliente, tempo);//Insere cliente na fila e informa o tempo no qual ele chegou
        insere_Fila(filaDoCaixa, cliente,tempo);//Insere um segundo cliente na fila e informa o tempo no qual ele chegou
        //remove_Fila(filaDoCaixa);
        insere_Fila(filaDaBandeja, remove_Fila(filaDoCaixa));//Remove da fila do caixa e insere na fila da bandeja
        if(Pilha!= NULL){//Se a pilha das bandejas não estiver vazia retira uma bandeja e remove um cliente da fila
            tmedio+=(tempo - filaDaBandeja->inicio->dados.tempodechegada)+4;
            remove_Fila(filaDaBandeja);
            Desempilha (Bandejas);
        }
        tbandejas++;
        if(tbandejas==12){//Quando o tempo das badejas alcança 12 repoe as bandejas
            EnchePilhaBandeja (filaDaBandeja)
            tbandejas=0;
        }
    }
}

FilaDin.c

#include <stdio.h>
#include <stdlib.h>
#include "FilaDin.h" //inclui os Protótipos
//Definição do tipo Fila
struct elemento{
    struct cliente dados;
    struct elemento *prox;
};
typedef struct elemento Elem;
//Definição do Nó Descritor da Fila
struct fila{
    struct elemento *inicio;
    struct elemento *final;
    int qtd;
};

Fila* cria_Fila(){
    Fila* fi = (Fila*) malloc(sizeof(Fila));
    if(fi != NULL){
        fi->final = NULL;
        fi->inicio = NULL;
        fi->qtd = 0;
    }
    return fi;
}

void libera_Fila(Fila* fi){
    if(fi != NULL){
        Elem* no;
        while(fi->inicio != NULL){
            no = fi->inicio;
            fi->inicio = fi->inicio->prox;
            free(no);
        }
        free(fi);
    }
}

/*int consulta_Fila(Fila* fi, struct cliente *cl){
    if(fi == NULL)
        return 0;
    if(fi->inicio == NULL)//fila vazia
        return 0;
    *al = fi->inicio->dados;
    return 1;
}*/

/*int*/void insere_Fila(Fila* fi, struct cliente cl){
    if(fi == NULL)
        return 0;
    Elem *no = (Elem*) malloc(sizeof(Elem));
    if(no == NULL)
        return 0;
    no->dados = cl;
    no->prox = NULL;
    if(fi->final == NULL)//fila vazia
        fi->inicio = no;
    else
        fi->final->prox = no;
    fi->final = no;
    fi->qtd++;
    //return 1;
}

/*int*/ void remove_Fila(Fila* fi){
    if(fi == NULL)
        return 0;
    if(fi->inicio == NULL)//fila vazia
        return 0;
    /*fi *temp = f -> prox;* //dados para retornar o elemento removido*/
    Elem *no = fi->inicio;
    fi->inicio = fi->inicio->prox;
    if(fi->inicio == NULL)//fila ficou vazia
        fi->final = NULL;
    free(no);
    fi->qtd--;
    return fi;
}

int tamanho_Fila(Fila* fi){
    if(fi == NULL)
        return 0;
    return fi->qtd;
}

int Fila_vazia(Fila* fi){
    if(fi == NULL)
        return 1;
    if(fi->inicio == NULL)
        return 1;
    return 0;
}

int Fila_cheia(Fila* fi){
    return 0;
}

void imprime_Fila(Fila* fi){
    if(fi == NULL)
        return;
    Elem* no = fi->inicio;
    while(no != NULL){
        printf("Matricula: %d\n",no->dados.matricula);
        printf("Nome: %s\n",no->dados.nome);
        printf("Notas: %f %f %f\n",no->dados.n1,
                                   no->dados.n2,
                                   no->dados.n3);
        printf("-------------------------------\n");
        no = no->prox;
    }
}

//Pilha* AbasteçaAPilha (){
//Função responsável por reabastecer a pilha de bandejas
}

FilaDin.h

//Arquivo FilaDin.h
struct clientes{
    int tempodechegada;
};

typedef struct fila Fila;

Fila* cria_Fila();
void libera_Fila(Fila* fi);
int consulta_Fila(Fila* fi, struct aluno *al);
/*int*/void insere_Fila(Fila* fi, struct aluno al);
/*int*/void remove_Fila(Fila* fi);
int tamanho_Fila(Fila* fi);
int Fila_vazia(Fila* fi);
int Fila_cheia(Fila* fi);
void imprime_Fila(Fila* fi);

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...