Ir ao conteúdo
  • Cadastre-se

otaviohpf

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

1
  1. 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);
  2. Olá, estou com um problema: tenho que ler um arquivo de .csv que contem simulações de jogos entre dois times e/ou consultas ao ranking. Foi especificado que o numero de consultas é muito maior que o numero de simulações de jogos. Para não ficar muito custoso pensei em sempre inserir os times após cada simulação já de maneira ordenada, e se o time já tiver feito algum outro jogo, eu removo e insiro novamente ordenado. /**************************** Estruturas ****************************/typedef int TipoChave;typedef struct TipoTime {char *nome;int classificacao;int pontos;}TipoTime;typedef struct TipoItem{TipoChave Chave;TipoTime Time;}TipoItem;typedef struct TipoCelula *TipoApontador;typedef struct TipoCelula{TipoItem Item;TipoApontador Prox;}TipoCelula;typedef struct TipoLista{TipoApontador Primeiro, Ultimo;}TipoLista; /**************************** Funcoes ****************************/void FLVazia (TipoLista *Lista);int Vazia(TipoLista Lista);void Insere (TipoItem x, TipoLista *Lista);void Retira (TipoApontador p, TipoLista *Lista, TipoItem *Item);void Imprime (TipoLista Lista);void ImprimeNoArquivoDeSaida (TipoLista Lista);int pesquisarTime(TipoLista *L , char *nome, TipoCelula *Celula);void inserirOrdenado(TipoLista Lista , TipoItem *Time);void atualizaVitoria(TipoLista Lista, TipoItem *Item, TipoApontador p);void atualizaEmpate(TipoLista Lista, TipoItem *Item, TipoApontador p); /*Função que faz uma lista vazia*/void FLVazia (TipoLista *Lista){Lista -> Primeiro = (TipoApontador) malloc (sizeof(TipoCelula));Lista -> Ultimo = Lista -> Primeiro;Lista -> Primeiro -> Prox = NULL;}int Vazia(TipoLista Lista){return (Lista.Primeiro == Lista.Ultimo);}/*Insere na lista*/void Insere (TipoItem x, TipoLista *Lista){Lista -> Ultimo -> Prox = (TipoApontador) malloc (sizeof (TipoCelula));Lista -> Ultimo = Lista -> Ultimo -> Prox;Lista -> Ultimo -> Item = x;Lista -> Ultimo -> Prox = NULL;}/*Remove da lista*/void Retira (TipoApontador p, TipoLista *Lista, TipoItem *Item){TipoApontador q;if ( (Vazia(*Lista)) || (p == NULL) || (p -> Prox == NULL) ){ printf ("\nErro: lista vazia ou posicao nao existe!!\n"); return;}q = p -> Prox;*Item = q -> Item;p -> Prox = q -> Prox;if (p -> Prox == NULL){ Lista -> Ultimo = p;}free (q);}/*Imprime a lista*/void Imprime (TipoLista Lista){TipoApontador Aux;Aux = Lista.Primeiro -> Prox;while (Aux != NULL){ printf ("%d \n" , Aux -> Item.Chave); Aux = Aux -> Prox;}}/*void ImprimeNoArquivoDeSaida (TipoLista Lista){TipoApontador Aux;Aux = Lista.Primeiro -> Prox;while (Aux != NULL){ fprintf (ArqSaida,"%d, \n" , Aux -> Item.Chave); Aux = Aux -> Prox;}}*///pesquisa se já existem o time na lista.int pesquisarTime(tlista *L,char *nome, TipoCelula *Celula){ TipoCelula *p; TipoTime *Time; while (p !=NULL){ Time = L->nome; if (strcmp(nome,Time->nome)==0){ return 1; } } return 0;}/*Esta função faz a inserção na lista de maneira ordenada*/void inserirOrdenado(TipoLista Lista **p, *Time){ lista *atual, *novo, *anterior; int num; novo = (lista *) malloc(sizeof(lista)); atual = *p; anterior = NULL; novo->valor = Time; if(atual == NULL){ novo->prox = NULL; *p = novo; } else{ while(atual != NULL && atual->valor < num){ anterior = atual; atual = atual->prox; } novo->prox = atual; if(anterior == NULL){ *p = novo; } else{ anterior->prox = novo; } }}/*A função recebe o time vitorioso, copia para um time temporário.chama a função Retira, para remover o item da listasoma os 3 pontos da vitória e insere novamente de maneira ordenada*/void atualizaVitoria(TipoLista Lista, TipoTime Time, TipoApontador p){TipoItem ItemTemp;//Copia o time para um TipoTime temporário.ItemTemp.Time.nome = Item.Time.nome;ItemTemp.Time.classificacao = Item.Time.classificacao;ItemTemp.Time.pontos = Item.Time.pontos+3;//Ponteiro ou conteudo ?Retira ( p, *Lista, *Item);inserirOrdenado( Lista **p, *ItemTemp);}/*A função recebe os times que empataram(um por vez), copia para um time temporário.chama a função Retira, para remover o item da listasoma o 1 ponto da vitória e insere novamente de maneira ordenada*/void atualizaEmpate(TipoLista Lista, TipoItem *Item, TipoApontador p){TipoItem ItemTemp;ItemTemp.Time.nome = Item.Time.nome;ItemTemp.Time.classificacao = Item.Time.classificacao;ItemTemp.Time.pontos = Item.Time.pontos+3;//Ponteiro ou conteudo ?Retira ( p, *Lista, *Item);inserirOrdenado( Lista **p, *ItemTemp);} int main(){/************************** VARIAVEIS *****************************/ char buffer[100]; int i = 0; int flag = 1; TipoLista Campeonato; TipoItem ItemAux; char *Acao; char *TipoDaAcao; char *NomeDoTime1; char *NomeDoTime2;/************************ LEITURA ARQUIVOS *******************************/ FILE *ArqEntrada; // leitura dos comandos FILE *ArqSaida; // resultado dos comandos FILE *ArqRanking; // arquivo do ranking ordenado ArqEntrada = fopen("entrada.csv","r"); ArqSaida = fopen("saida.csv", "w"); ArqRanking = fopen("ranking.csv","r"); if (ArqEntrada == NULL) { printf ("\nERRO: Arquivo de entrada incorreto!"); } if (ArqSaida == NULL){ printf("\nERRO: Arquivo de saida incorreto!"); } if (ArqRanking == NULL){ printf("\nERRO: Ranking nao encontrado. Sera gerado um novo."); ArqRanking = fopen("ranking.csv","w"); flag = 0; }/************************ CARREGANDO SIMULAÇÕES ANTERIORES *******************************/ if (flag==1){ fgets (buffer, 100, ArqRanking); while (!feof(ArqRanking)){ printf ("\n"); ItemAux.Time.nome = atoi (strtok (buffer, ",")); printf ("\nNome: %s", ItemAux.Time.nome); ItemAux.Time.classificacao = atoi (strtok (buffer, ",")); printf ("\nClassificacao: %d", ItemAux.Time.classificacao ); ItemAux.Time.pontos = atoi(strtok (NULL, ",")); printf ("\nPontuacao: %d", ItemAux.Time.pontos); fgets (buffer, 100, ArqRanking); } }/************************ LEITURA DA ENTRADA *******************************/ while (!feof(ArqEntrada)){ Acao = strtok (NULL, ","); if (strcmp("CONSULTA", Acao)==0){ TipoDaAcao = atoi (strtok (buffer, ",")); NomeDoTime1 = atoi (strtok (buffer, ",")); //if (pesquisarTime(&Campeonato, *NomeDoTime1, ItemAux )==0){ if (1){ printf("/nERRO: Time nao encontrado para consulta."); } if (strcmp("PONTUACAO", Acao)==0){ fprintf(ArqSaida, "%s,%s,%d", TipoDaAcao, NomeDoTime1, ItemAux.Time.pontos); } else if (strcmp("RANKING", Acao)==0){ fprintf(ArqSaida, "%s,%s,%d", TipoDaAcao, NomeDoTime1, ItemAux.Time.classificacao); } } else if(strcmp("VITORIA", Acao)==0){ NomeDoTime1 = atoi (strtok (buffer, ",")); NomeDoTime2 = atoi (strtok (buffer, ",")); if (1){//*pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )*/){ atualizaVitoria(Campeonato, *Item, p); } else if(1){ //(pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )==0){ //Como somar os 3 pontos para inserir ordenado? inserirOrdenado(Campeonato p, *Time); } if (1){ //(pesquisarTime(*NomeDoTime2, Campeonato, ItemAux )==0){ inserirOrdenado(Campeonato p, *Time); } /* else if(strcmp("EMPATE", Acao)==0){ NomeDoTime1 = atoi (strtok (buffer, ",")); NomeDoTime2 = atoi (strtok (buffer, ",")); /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. if (pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )){ atualizaEmpate(Campeonato, *Item, p); } /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. else if (pesquisarTime(*NomeDoTime1, Campeonato, ItemAux )==0){ //Como somar o 1 ponto para inserir ordenado? inserirOrdenado(Campeonato p, *Time); } /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. if (pesquisarTime(NomeDoTime2, Campeonato, ItemAux )){ atualizaEmpate(Campeonato, *Item, p); } /* pesquisarTime retorna 1 se o time for encontrado e 0 se não. else if (pesquisarTime(*NomeDoTime2, Campeonato, ItemAux )==0){ //Como somar o 1 ponto para inserir ordenado? inserirOrdenado(Campeonato p, *Time); } */ } else{ printf("/nErro: Primeiro argumento invalido."); } }/************************ IMPRIME RANKING *******************************/ ImprimeNoArquivoDeSaida(Campeonato); fclose(ArqEntrada); fclose(ArqSaida); fclose(ArqRanking); return 0;} Fiz o código desta maneira porém estou com muitas duvidas quanto as passagens dos parâmetros para as funções. Vocês podem me ajudar ? Obrigado

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...