Ir ao conteúdo

Posts recomendados

Postado
Um hospital deseja informatizar o seu sistema de atendimento aos pacientes. As recepcionistas utilizarão o terminal para fazer a ficha de cada paciente que chega. Cada ficha deve conter o nome e o estado do paciente (regular, ruim, péssimo). Ao terminar de atender a um paciente, o médico consulta o sistema para chamar o próximo e, naturalmente, o sistema deve priorizar os pacientes que estiverem em pior estado de saúde. Implemente esse sistema, usando uma fila de prioridades com alocação encadeada.

Um hospital deseja informatizar o seu sistema de atendimento aos pacientes. As recepcionistas utilizarão o terminal para fazer a ficha de cada paciente que chega. Cada ficha deve conter o nome e o estado do paciente (regular, ruim, péssimo). Ao terminar de atender a um paciente, o médico consulta o sistema para chamar o próximo e, naturalmente, o sistema deve priorizar os pacientes que estiverem em pior estado de saúde. Implemente esse sistema, usando uma fila de prioridades com alocação encadeada.

Alguém poderia me ajudar resolver essa questão? 

  • Curtir 1
Postado

@Danilo12      opa  ,   você já tem hum código sobre esse exercício ?  ,  ainda não  estudei essa parte da apostila e gostaria de ver como faz para que eu possa começar nela , então se você puder poste ele para podermos ver como está em que podemos ajudar   .

  • Curtir 1
Postado

#include <stdio.h>
#include <stdlib.h>
#include "listaEnc.h"

void criar(Lista* L){
    *L = NULL;
    printf("Lista inicializada!\n");
}

int vazia(Lista L){
    return(L == NULL);
}


void inserir(Lista* L, int n){
    Lista novo;
    novo = (Lista)malloc(sizeof(struct no));
    novo->item = n;
    novo->prox = *L;
    *L = novo;
    printf("%d foi inserido na lista\n",n);
}

void inserirFim(Lista* L, int n){
    Lista novo, aux;
    novo = (Lista)malloc(sizeof(struct no));
    novo->item = n;
    if(vazia(*L)){
        novo->prox = *L;
        *L = novo;    
    }else{
        aux = *L;
        while(aux->prox != NULL){
            aux = aux->prox;
        }
        novo->prox = aux->prox;
        aux->prox = novo;    
    }
    printf("%d foi inserido na lista\n",n);
}

void inserirOrd(Lista* L, int n){
    Lista novo, aux, ant=NULL;
    novo = (Lista)malloc(sizeof(struct no));
    novo->item = n;
    aux = *L;
    while(aux != NULL && aux->item < n){
        ant = aux;
        aux = aux->prox;
    }
    if(ant == NULL){
        novo->prox = *L;
        *L = novo;
    }else{
        novo->prox = ant->prox;
        ant->prox = novo;
    }    
    printf("%d foi inserido na lista\n",n);
}

void mostrar(Lista L){
    printf("[");
    while(L != NULL){
        printf(" %d",L->item);
        L = L->prox;
    }
    printf(" ]\n");
}

void remover(Lista* L, int n){
    if(vazia(*L)){
        printf("Impossivel remover: lista vazia!\n");
    }else{
        if((*L)->item == n){
            *L = (*L)->prox;
            printf("Item removido: %d\n",n);
        }else{
            Lista ant, aux;
            aux = *L;
            while(aux->prox != NULL && aux->item != n){
                ant = aux;
                aux = aux->prox;
            }
            if(aux->item == n){
                ant->prox = aux->prox;
                aux->prox = NULL;
                free(aux);
                printf("Item removido: %d\n",n);
            }else{
                printf("Item %d nao consta na lista\n",n);
            }
        }
    }
}


Lista separa (Lista L, int valor){
    Lista ret;
    if(vazia(L)){
        ret= NULL;
    }else{
        Lista aux = L;
        while(aux->prox != NULL && aux->item != valor){
            aux = aux->prox;
        }
        if(aux->item == valor){
            ret = aux->prox;
                aux->prox = NULL;
        }else{
            ret = NULL;
        }
    }
    return ret;
}

adicionado 0 minutos depois

Ai preciso criar uma fila de prioridades

 

  • Curtir 1
Postado

eu tenho um sistema de fila bem semelhante só precisa fazer alguma modificacoes vou postar ver se te ajuda

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
typedef struct dado{
int codigo;
 char nome[80];
 int qt;
}dados;

typedef struct Item {   
dados numero; 
struct Item *proximo;    
}Itens;

typedef struct Filas { 
    Itens *inicio; 
    Itens *fim; 
}Fila;

void Inicializar(Fila **fila) 
{ 
    // -> Recebe a fila por referencia 
    //    para inicializ?-la 
    *fila = (Fila *) malloc(sizeof(Fila)); 
    (*fila)->inicio = NULL; 
    (*fila)->fim = NULL; 
}

int EstaVazia(Fila *fila) 
{ 
    return fila->inicio == NULL; 
}

void Inserir(Fila *fila, int numero, char nome[],int qt) 
{ 
    Itens *novo; 
    novo = (Itens *)malloc(sizeof(Itens));  

    // -> Verifica se a mem?ria foi alocada com sucesso 
    if (novo != NULL) 
    { 
        novo->numero.codigo = numero; 
        novo->numero.qt = qt;
        strcpy(novo->numero.nome,nome); 
        novo->proximo = NULL;

        if(EstaVazia(fila)) 
        { 
            // -> Primeiro Item da Fila. 
            fila->inicio = novo; 
            fila->fim = novo; 
        } 
        else 
        { 
            // -> Ultimo item da Fila 
            fila->fim->proximo = novo; 
            fila->fim=novo; 
        } 
    } 
}

void Retirar(Fila *fila) 
{ 
    Itens *item;

    if(!EstaVazia(fila)) 
    { 
        item = fila->inicio; 
        fila->inicio = item->proximo; 
        free(item);

        // -> Se a fila acabou devemos atualizar o final 
        if (fila->inicio == NULL) 
            fila->fim = NULL; 
    } 
}

void MostrarFila(Fila *fila) 
{ 
    int i = 0; 
    Itens *item; 
    printf("\n\n Listando...\n\n"); 
    printf("\n---------------------------------\n");

    if (EstaVazia(fila)) 
    { 
        printf ("A Fila esta vazia!\n"); 
    } 
    else 
    {       
        item = fila->inicio;
              while(item != NULL) 
        { 
            i++; 
            printf("Paciente [%i]\n",i); 
            printf("Codigo-> %d\t", item->numero.codigo); 
            printf("Nome-> %s\t", item->numero.nome); 
            printf("Data-> %d\t", item->numero.qt);
            item = item->proximo; 
        } 
    }

    printf("\n---------------------------------\n"); 
}

void Menu() 
{   system("cls");
    printf("Digite a sua escolha: \n" );
    printf("1 Inserir paciente \n" );
    printf("2 retirar paciente \n" );
    printf("3 mostrar consultas \n");
    printf("4 Sair \n" );
    printf("Opcao : " );
    
}


int tamanho (Fila *fila)
{ /*Retorna o tamanho da fila*/ 
 Itens *p;
 int cont = 0; 
 p = fila->inicio;
 while (p != NULL)
   { cont ++; 
     p = p->proximo; 
   }
    return cont;
 }
int main() 
{    int cod;
    Fila *fila = NULL; 
    int opcao,qt,tam; 
    int numero;
    char nome[80];
    float valor;

    Inicializar(&fila); 
   do{
   
    Menu(); 
    scanf("%i", &opcao);

   

        switch (opcao) 
        { 
            case 1: 
                printf( "Digite o codigo: "); 
                scanf("\n%i", &numero);
                printf( "Digite o nome: "); 
                scanf("\n%s", &nome);
                printf( "Digite a data: "); 
                scanf("\n%i", &qt);
                Inserir(fila, numero,nome,qt); 
                MostrarFila(fila);
                system("pause");

                break; 
            case 2: 
                Retirar(fila); 
                MostrarFila(fila);
                system("pause");

                break;
                
            case 3: 
                tam= tamanho(fila); 
                printf( "Tamanho Fila=%d\n",tam);
                system("pause");

                break;

                                
            case 4: 
                   exit;
                   break;
            default: 
                
                printf( "Escolha invalida.\n\n"); 
                system("pause");
                break; 
        }

      
    }while (opcao!=5);

    system("pause"); 
    return 0;
}

 

  • Obrigado 1
Postado
Em 19/06/2020 às 13:58, devair1010 disse:

opa  ,   você já tem hum código sobre esse exercício ?

 

Em 19/06/2020 às 14:00, Danilo12 disse:

tenho nao 

 

Já programou alguma fila antes, ao menos?

 

Estudou o que é uma fila com prioridades? Está de fato falando da estrutura de dados Priority Queue? Ou é apenas um exercício em que tem uma fila com prioridades? São coisas distintas.

 

Uma Priority Queue tem propriedades distintas e os problemas que usam essa estrutura são implementados através dessas funções. Uma fila usando uma estrutura de pilha ou uma lista ligada pode ter uma prioridade acrescentada na hora de inserir ou retirar elementos.

 

Como é o enunciado?

 

 

 

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!