Ir ao conteúdo
  • Cadastre-se

Kletian

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Reputação

0
  1. Consegui descobrir o problema depois de ver um video no youtube sobre estrutura de dados. Ao que parece, o meu #define maxmedico e #define maxdoente estava na verdade definindo a quantidade máxima de consultas diárias, e não a quantidade de elementos da fila. Pra resolver defini ambos como 100, e criei outras duas globais de 3 médicos e 10 pacientes, que usei para fazer a comparação com o tamanho da fila (se tamanho = max), para gerar a mensagem de overflow, e fazer ela andar de forma circular.
  2. Boa tarde pessoal, tenho um trabalho de estrutura de dados para fazer, sobre filas e listas, mas estou com um pequeno problema. A proposta do trabalho é fazer um simulador de consultas médicas, com uma fila de médicos (no máximo 3 médicos), uma fila de pacientes (no máximo 10), e seguindo o conceito de fila circular (quando o médico sai da fila em consulta, ele, quando terminar, deve retornar para o fim da fila, e os próximos pacientes que chegarem, tambem devem ir para o fim da fila de pacientes). Eu fiz praticamente uma cópia do algoritmo base de fila circular (que funciona perfeitamente) passado pelo professor, no qual ele adiciona e remove caracteres, mas o problema é que nessa versão que fiz, ele parece não estar fazendo o queue/dequeue circular, mas sim apenas alterando o local de inicio e fim das filas, pois se eu tento adicionar um décimo primeiro paciente na fila (mesmo ja tendo removido alguns), ele não o faz, mas tambem não mostra a mensagem de overflow (já que o tamanho da fila, no dequeue, é diminuido em 1). Alguém pode me dizer onde está o problema? Eu ainda preciso criar uma lista depois, mas acredito que da forma que está, a lista tambem vai apresentar problemas. #include <stdio.h>#include <stdlib.h>#include <string.h>#define maxmedico 3#define maxdoente 10typedef struct{ char nome[20]; } medico; typedef struct{ medico mediconome[maxmedico]; int iniciofilamedico; int fimfilamedico; int tamanho; }filamedico; typedef struct{ medico mediconome2[maxmedico]; int iniciofilamedico2; int fimfilamedico2; int tamanho; }filaauxiliar;typedef struct{ char nome[20]; } doente; typedef struct{ doente doentenome[maxdoente]; int iniciofiladoente; int fimfiladoente; int tamanho; }filadoente;void inicializafilamedico(filamedico *F){ F->iniciofilamedico=0; F->fimfilamedico=-1; F->tamanho=0; } void inicializafilaauxiliar(filaauxiliar *F){ F->iniciofilamedico2=0; F->fimfilamedico2=-1; F->tamanho=0; } void inicializafiladoente(filadoente *F){ F->iniciofiladoente=0; F->fimfiladoente=-1; F->tamanho=0; } void QueueDoente(filadoente *F, doente doentenome){ if (F->tamanho==maxdoente) printf ("Overflow na fila\n"); else{ F->fimfiladoente=(F->fimfiladoente+1)%maxdoente; F->doentenome[F->fimfiladoente] = doentenome; F->tamanho+=1; } } void DequeueDoente(filadoente *F, doente *doentenome){ if (F->tamanho==0){ printf ("Underflow na fila\n"); doentenome=NULL; } else{ *doentenome = F->doentenome[F->iniciofiladoente]; F->iniciofiladoente=(F->iniciofiladoente+1)%maxdoente; F->tamanho-=1; } }void adicionadoente(filadoente *F, doente *doentenome){ QueueDoente(F, (*doentenome)); }void listadoente(doente doentenome){ printf("\nNome: %s", doentenome.nome);}void listatodosdoentes(filadoente *F){ int i; doente doentenome; printf("\nLISTA DE DOENTES ESPERANDO ATENDIMENTO:\n"); for(i = F->iniciofiladoente; i< F->fimfiladoente+1; i++){ doentenome = F->doentenome[i]; listadoente(doentenome); }} void QueueMedico(filamedico *F, medico mediconome){ if (F->tamanho==maxmedico) printf ("Overflow na fila\n"); else{ F->fimfilamedico=(F->fimfilamedico+1)%maxmedico; F->mediconome[F->fimfilamedico] = mediconome; F->tamanho+=1; } }void QueueMedicoAuxiliar(filaauxiliar *F, medico mediconome2){ if (F->tamanho==(maxmedico)) printf ("Overflow na fila\n"); else{ F->fimfilamedico2=(F->fimfilamedico2 +1)%maxmedico; F->mediconome2[F->fimfilamedico2] = mediconome2; F->tamanho+=1; } }void DequeueMedico(filamedico *F, medico *mediconome){ if (F->tamanho==0){ printf ("Underflow da na fila\n"); mediconome = NULL; } else{ *mediconome = F->mediconome[F->iniciofilamedico]; F->iniciofilamedico=(F->iniciofilamedico+1)%maxmedico; F->tamanho-=1; } }void DequeueMedicoAuxiliar(filaauxiliar *F, medico *mediconome2){ if (F->tamanho==0){ printf ("Underflow da na fila\n"); mediconome2 = NULL; } else{ *mediconome2 = F->mediconome2[F->iniciofilamedico2]; F->iniciofilamedico2=(F->iniciofilamedico2 +1)%maxmedico; F->tamanho-=1; } } void adicionamedico(filamedico *F, medico *mediconome){ QueueMedico(F, (*mediconome)); }void adicionamedicoauxiliar(filaauxiliar *F, medico *mediconome2){ QueueMedicoAuxiliar(F, (*mediconome2)); }void listamedico(medico mediconome){ printf("\nNome: %s", mediconome.nome);}void listatodosmedicos(filamedico *F){ int i; medico mediconome; printf("\nLISTA DE MEDICOS DISPONIVEIS:\n"); for(i = F->iniciofilamedico ; i< F->fimfilamedico+1; i++){ mediconome = F->mediconome[i]; listamedico(mediconome); }}void listamedicoauxiliar(medico mediconome2){ printf("\nNome: %s", mediconome2.nome);}void listatodosmedicos2(filaauxiliar *F){ int i; medico mediconome2; printf("\nLISTA DE MEDICOS DISPONIVEIS auxiliar:\n"); for(i = F->iniciofilamedico2; i< F->fimfilamedico2+1; i++){ mediconome2 = F->mediconome2[i]; listamedicoauxiliar(mediconome2); }} void consultas(filamedico *F, filadoente *J, filaauxiliar *K){ medico auxchar; medico mediconome = F->mediconome[F->iniciofilamedico]; strcpy(auxchar.nome, mediconome.nome); doente doentenome = J->doentenome[J->iniciofiladoente]; printf("\n\nMedico %s chamou o paciente %s para consulta\n", mediconome.nome, doentenome.nome); adicionamedicoauxiliar(K, &auxchar); DequeueMedico(F, &mediconome); DequeueDoente(J, &doentenome); } void terminaconsulta(filaauxiliar *F, filamedico *K){ medico auxchar; medico mediconome2 = F->mediconome2[F->iniciofilamedico2]; strcpy(auxchar.nome, mediconome2.nome); printf ("\n\nMedico %s terminou o atendimento e esta pronto para atender novamente\n\n", mediconome2.nome); adicionamedico(K, &auxchar); DequeueMedicoAuxiliar(F, &mediconome2); } void main(){ filamedico fila_1; filadoente fila_2; filaauxiliar fila_3; int i; inicializafilamedico(&fila_1); inicializafiladoente(&fila_2); inicializafilaauxiliar(&fila_3); medico medico1; strcpy(medico1.nome, "kiritsugu"); adicionamedico(&fila_1, &medico1); medico medico2; strcpy(medico2.nome, "tokiyomi"); adicionamedico(&fila_1, &medico2); medico medico3; strcpy(medico3.nome, "kirei"); adicionamedico(&fila_1, &medico3); doente doente1; strcpy(doente1.nome, "saber"); adicionadoente(&fila_2, &doente1); doente doente2; strcpy(doente2.nome, "gilgamesh"); adicionadoente(&fila_2, &doente2); doente doente3; strcpy(doente3.nome, "lancer"); adicionadoente(&fila_2, &doente3); doente doente4; strcpy(doente4.nome, "Iskandar"); adicionadoente(&fila_2, &doente4); doente doente5; strcpy(doente5.nome, "Caster"); adicionadoente(&fila_2, &doente5); doente doente6; strcpy(doente6.nome, "Archer"); adicionadoente(&fila_2, &doente6); doente doente7; strcpy(doente7.nome, "Shirou"); adicionadoente(&fila_2, &doente7); doente doente8; strcpy(doente8.nome, "Rin"); adicionadoente(&fila_2, &doente8); doente doente9; strcpy(doente9.nome, "Ilyasviel"); adicionadoente(&fila_2, &doente9); doente doente10; strcpy(doente10.nome, "Sakura"); adicionadoente(&fila_2, &doente10); listatodosmedicos(&fila_1); printf("\n\n"); listatodosdoentes(&fila_2); consultas(&fila_1, &fila_2, &fila_3); consultas(&fila_1, &fila_2, &fila_3); listatodosmedicos(&fila_1); printf("\n\n"); listatodosdoentes(&fila_2); listatodosmedicos2(&fila_3); terminaconsulta(&fila_3, &fila_1); listatodosmedicos(&fila_1); printf("\n\n"); listatodosmedicos2(&fila_3); consultas(&fila_1, &fila_2, &fila_3); terminaconsulta(&fila_3, &fila_1); listatodosmedicos(&fila_1); printf("\n\n"); listatodosmedicos2(&fila_3); listatodosdoentes(&fila_2); getch();}

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