Ir para conteúdo
Fórum Script Brasil
  • 0

Problemas em comparação (fila encadeada simples)


Zualdo

Pergunta

Fala galera, to fazendo um programa aki relacionado a posto de saúde.

Codificar um programa que utilize o conceito de fila encadeada simples para criar em memória uma fila de atendimento de pacientes a serem atendidos por médicos em um posto de saúde. Essa fila deve ser implementada pela seguinte estrutura e variáveis globais, a seguir:

struct fila

{char nomePaciente [20];

int idade;

float temperatura;

struct fila próximo;

}*inicio, *fim;

A chamada para o atendimento de consulta será feita ao paciente primeiro da fila para um dos médicos que estiver liberado (não em atendimento).

No posto de saúde existem 5 médicos disponíveis, que deverão ser considerados na implementação do vetor de estruturas global a seguir:

struct medico

{ char nome[20]; //nome do médico

bool liberado; // true: liberado, false: em atendimento

int qtdeAtendimentos; //quantidade de atendimentos já realizados

} medicos [5]; //vetor do tipo struct medico

Este vetor deverá ser inicializado no começo do programa com dados de cada médico:

nome : nome do médico, recebido por digitação

liberado : true (médico liberado para atendimento)

qtdeAtendimentos : 0 (nenhum atendimento realizado)

O controle do programa será feito por meio de opções exibidas num menu com as opções descritas a seguir, as quais deverão chamar uma função correspondente, como se segue:

(Fiz todos os menus já, so ta faltando uma parte desse):

Verificar se existe paciente na fila

● Solicitar o nome do médico. Verificar se o mesmo está liberado para atendimento (liberado = true). Caso contrário, emitir mensagem de erro

● Visualizar o nome do paciente e o do médico que o atenderá na consulta.

● Remover o paciente da fila

● Marcar o médico como não liberado (liberado = false)

● Adicionar 1 ao número a qtde de atendimentos feitos por esse médico

A remoção e outros itens eu já fiz, só q, na hora de comparar o nome do médico q o cara pediu com um já existente, acontece coisa louca, como por exemplo, o medico q eu pedi, fica como liberado = true, e todos os outros viram liberado = false... Não to conseguindo arrumar esse detalhe... buga direito.

quando eu tentei apenas com if, if (desejado == medicos.nome). Ele num fazia nada, então tentei o strcmp, so q ai acontece akilo q eu disse.

vo postar aki essa parte do programa, pra você entenderem q eu fiz.

#include <conio.h>

#include <stdio.h>

#include <ctype.h>

#include <stdlib.h>

#include <cstdlib>

#include <string.h>

typedef char string[20];

struct fila

{char nomePaciente [20];

int idade;

float temperatura;

struct fila *proximo;

}*inicio, *fim;

struct medicos

{char nome[20];

bool liberado;

int qtdeAtendimentos;

} medicos [5];

void inserir ();

int atender ();

void liberar_medico ();

void relacionar_medicos ();

void pesquisar ();

int main ()

{

int opcao,i;

inicio = NULL;

fim = NULL;

for (i=0;i<5;i++)

{

printf ("Digite o nome do medico %d: ", i+1);

gets (medicos.nome);

medicos.liberado=true;

medicos.qtdeAtendimentos = 0;

}

while (opcao != 6)

{

printf ("\n -=-= [MENU - POSTO DE SAUDE] =-=-");

printf ("\n\n 1 - Inserir um paciente na fila");

printf ("\n 2 - Atender um paciente");

printf ("\n 3 - Liberar um medico");

printf ("\n 4 - Relacionar medicos liberados");

printf ("\n 5 - Pesquisar");

printf ("\n 6 - Sair do programa\n\n");

scanf ("%d", &opcao);

switch (opcao)

{

case 1:

inserir();

break;

case 2:

atender();

break;

case 3:

liberar_medico ();

break;

case 4:

relacionar_medicos ();

break;

case 5:

pesquisar ();

break;

case 6:

break;

default: printf ("\n Opcao invalida ");

}

}

}

void inserir ()

{

int aux;

struct fila *novo;

novo = (struct fila *) malloc (sizeof (struct fila));

novo->proximo = NULL;

printf ("\nDigite o nome do paciente: ");

fflush(stdin);

gets (novo->nomePaciente);

printf ("Digite a idade do paciente: ");

scanf ("%d", &novo->idade);

printf ("Digite a temperatura do paciente: ");

scanf ("%f", &novo->temperatura);

if (fim == NULL)

{inicio = novo;}

else

{fim->proximo = novo;}

fim = novo;

}

int atender ()

{

int atendimentos, i=0, val;

struct fila *aux;

char desejado[20];

if (inicio == NULL)

{

printf ("\n Fila vazia\n\n");

return 0 ;

}

aux = inicio;

printf ("\nDigite o nome do medico desejado: ");

fflush(stdin);

gets (desejado);

do

{

if (strcmp(desejado, medicos.nome ) == true)

{

if (medicos.liberado==true)

{

medicos.liberado=false;

medicos.qtdeAtendimentos = medicos.qtdeAtendimentos + 1;

}

}

i++;

}

while (i<5);

/*for (i=0;i<5;i++)

{

if (strcmp(desejado, medicos.nome ) == true)

{

if (medicos.liberado==true)

{

medicos.liberado=false;

medicos.qtdeAtendimentos = medicos.qtdeAtendimentos + 1;

}

}

}

*/

val = inicio->idade;

aux = inicio;

inicio = inicio->proximo;

if (inicio == NULL)

{

fim = NULL;

}

free(aux);

return val;

}

OBS: Essa parte é a funcao ATENDER

q eu to enroscado.

arrumarando esse detalhe, já finalizo o programa, vlw ae qm puder ajudar!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Funcionalmente, a operação de comparação está correta. O valor true é, normalmente, 1. A função strmcp() retorna mesmo um valor int. Mas parece certo que o OP confundiu as bolas (não leu o help) e acha que a função retorna um valor booleano. Inclusive, qualquer expressão que retorne um valor booleano não precisa do operador de teste ==. Isso é uma redundância desnecessária.

Aliás, cadê a indentação? Fica ruim demais ler um código não indenteado. :(

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...