Ir para conteúdo
Fórum Script Brasil

muttleydm

Membros
  • Total de itens

    6
  • Registro em

  • Última visita

Posts postados por muttleydm

  1. bom pessoal...eu refiz o código do cadastro e ele ficou mais curto.

    ele está cadastrando no inicio, no fim e no meio.

    Porém no modo que fiz, ele faz a inserção no final por último e com isso toda vez que faço a inserção no meio ele acaba inserindo no final também.

    Alguém poderia dar uma idéia de como mudar o código para que isso deixe de ocorrer?

    Aí segue o código que fiz:

    void Lista::cadastrar(Paciente P, bool &deuCerto) {
        Lista *aux, *proximo; //aux é o novo elemento a ser cadastrado e proximo um ponteiro para elementos da lista
        Lista *anterior;
        anterior = this;
        aux = new Lista();
        aux->info = P;
        aux->next = NULL;
    
        if (listaVazia()) {//lista vazia, insere na primeira posição
            this->info = aux->info;
            this->next = NULL;
            deuCerto = true;
            cout << "true no inicio" << endl;
        } else {
            proximo = this;
            if (aux->info.GetID() < proximo->info.GetID()) {//inserir à esquerda
                aux->next = proximo;
                proximo = aux;
                deuCerto = true;
            } else {//inserir à direita
                //while (proximo != NULL) {
    
                while (proximo->next != NULL) {
                    if ((aux->info.GetID() > proximo->info.GetID()) && (aux->info.GetID() < proximo->next->info.GetID())) {
                        cout << "inseriu no meio" << endl;
                        aux->next = proximo->next;
                        proximo->next = aux;
                        deuCerto = true;
                    } else {//andando pela lista
                        proximo = proximo->next;
                        anterior = anterior->next;
                    }
                }
                if (proximo->next == NULL) {
                    if (aux->info.GetID() == proximo->info.GetID()) {
                        deuCerto = false;
                        cout << "Já cadastrado" << endl;
                    } else {
                        cout << "no fim" << endl;
                        proximo->next = aux;
                        deuCerto = true;
                    }
                }
    
            }
    
        }
    }

    Espero que alguém possa me ajudar.

  2. Oi pessoal, queria pedir a ajuda de vocês para resolver meu problema.

    Estou fazendo um trabalho para a faculdade que consiste em uma simulação de atendimento de hospital.

    Estou fazendo uma lista ordenada para o cadastro dos pacientes.

    Cada paciente tem ID de identificação, string Nome e SobreNome e grau de Prioridade para atendimento.

    Fiz uma classe Paciente para criar os pacientes e uma classe Lista(com herança de paciente) para tratar a inserção dos pacientes nele.

    Estou com problema na função cadastro. Consigo cadastrar pacientes no inicio da lista, esteja ela vazia ou sendo o ID a ser inserido menor que o primeiro ID cadastrado.

    Porém, não estou conseguindo cadastrar no meio dela. Fiz um while para posicionar poonteiros para indicar a posição correta para o cadastro, mas sempre que tento adicionar um paciente da erro de execução quando ele esta antes deste while.

    Vou passar os códigos que fiz, espero que alguém possa me ajudar.

    Paciente: (deixei tudo na Paciente.h porque não teria muito código para inserir na .cpp)

    /* 
     * File:   Paciente.h
     * Author: mutiley
     *
     * Created on 11 de Junho de 2012, 22:11
     */
    
    #ifndef PACIENTE_H
    #define    PACIENTE_H
    #include "string.h"
    #include "iostream"
    using namespace std;
    
    class Paciente {
    private:
        string Nome;
        string SobreNome;
        int Prioridade; //prioridade de atendimento
        int ID; //código de cadastro do paciente; todo cliente possui um código diferente.
        // Usado para ordenação na lista de cadastro de atendimento
    
    public:
    
        Paciente() {
        };
    
        Paciente(int id, string nome, string sobrenome, int prioridade) {
            this->Nome = nome;
            this->ID = id;
            this->SobreNome = sobrenome;
            this->Prioridade = prioridade;
        }
    
        string GetNome() {
            return Nome;
        }
    
        void SetNome(string Nome) {
            this->Nome = Nome;
        }
    
        string GetSobreNome() {
            return SobreNome;
        }
    
        void SetSobreNome(string SobreNome) {
            this->SobreNome = SobreNome;
        }
    
        int GetID() {
            return ID;
        }
    
        void SetID(int ID) {
            this->ID = ID;
        }
    
        int GetPrioridade() {
            return Prioridade;
        }
    
        void SetPrioridade(int Prioridade) {
            this->Prioridade = Prioridade;
        }
    
        void imprimirPaciente() {
            cout << "ID: " << GetID();
            cout << "   Nome: " << GetNome() << " " << GetSobreNome();
            cout << "   Prioridade: " << GetPrioridade() << endl;
        }
    };
    
    #endif    /* PACIENTE_H */
    Lista.h:
    /* 
     * File:   Lista.h
     * Author: mutiley
     *
     * Created on 11 de Junho de 2012, 22:19
     */
    
    #ifndef LISTA_H
    #define    LISTA_H
    #include "Paciente.h"
    #include "string.h"
    #include "iostream"
    
    using namespace std;
    
    //classe que representa uma lista com a relação de
    //todos os atendimentos do hospital, portanto todo 
    //paciente cadastrado deve ser atendido.
    
    class Lista : public Paciente{
    private:
        Paciente info;
        Lista *next;
    
    public:
    
        Lista() {
            Paciente p0(0,"null", "null", 0);
            this->info = p0;
            this->next = NULL;
            
        }
        void remover(Paciente, bool&);//remove um paciente
        void cadastrar(Paciente, bool&); //cadastra um novo paciente
        bool consultar(Paciente); //consulta se o paciente está cadastrado
        void imprimir(); //imprime toda a lista
        bool listaVazia(); //verifica se a lista está vazia
        void buscaLocalParaInsercao(); //encontra o local apropriado para cadastrar um novo paciente de acordo com a ID;
    
    };
    
    #endif    /* LISTA_H */
    Lista.cpp:
    #include "Lista.h"
    #include "Paciente.h"
    
    bool Lista::listaVazia() {
        if (this->info.GetID() == 0) {
            return true;
        } else
            return false;
    }
    
    void Lista::cadastrar(Paciente P, bool &deuCerto) {
        Lista *aux, *proximo; //aux é o novo elemento a ser cadastrado e proximo um ponteiro para elementos da lista
        aux = new Lista();
        aux->info = P;
        aux->next = NULL;
    
        if (listaVazia()) {//lista vazia, insere na primeira posição
            this->info = aux->info;
            this->next = NULL;
            deuCerto = true;
        } else {
            proximo = this; //proximo aponta para primeiro elemento
            if (aux->info.GetID() < proximo->info.GetID()) {//id a ser inserido é menor do que o primeiro id da lista
                aux->next = proximo;
                proximo = aux;
                deuCerto = true;
            } else {//enquanto ID da lista for maior que ID a ser inserido, percorre a lista
                Lista *anterior = NULL;
    
                while (aux->info.GetID() > proximo->info.GetID()) {
                    cout<<"asd"<<endl;
                    anterior = proximo;
                    proximo = proximo->next;
                }
    
                if (proximo != NULL) {//ou seja, achou a posição e ela não é a última
                    //verifica se são iguais. Se forem não cadastra
                    if (aux->info.GetID() == proximo->info.GetID()) {
                        cout << "já esta cadastrado." << endl;
                        deuCerto = false;
                    } else { //caso contrário cadastra
                        aux->next = proximo;
                        anterior->next = aux;
                        deuCerto = true;
                    }
                } else {//insere na última posição da lista
                    anterior->next = aux;
                    proximo  = aux;
                    deuCerto = true;
                }
            }
        }
        if (deuCerto)
            cout << "true" << endl;
        else
            cout << "false" << endl;
    }
    
    bool Lista::consultar(Paciente P) {
        bool achou = false;
        Lista *aux, *auxLista;
        aux->info = P;
        aux->next = NULL;
        auxLista = this;
        cout << "con" << endl;
        if (listaVazia())
            cout << "Nenhum paciente cadastrado na lista." << endl;
        else {
            cout << "else cons" << endl;
            while ((auxLista->next != NULL) && (aux->info.GetID() != auxLista->info.GetID()))
                aux = aux->next;
            if (aux->info.GetID() == auxLista->info.GetID()) {
                achou = true;
                cout << "Achou" << endl;
            }
        }
        return achou;
    }
    
    void Lista::remover(Paciente P, bool &deuCerto) {
        Lista *aux;
        aux->info = P;
    
    
        if (!consultar(P))//não encontrou o ID na lista.
            cout << "ID não encontrada -> paciente não cadastrado." << endl;
        else {
    
        }
    
    }
    
    void Lista::imprimir() {
        Lista *aux;
        aux = this;
    
        if (!listaVazia()) {
            while (aux != NULL) {
                cout << "as" << endl;
                cout << "ID: " << aux->info.GetID();
                cout << "    Prioridade: " << aux->info.GetPrioridade();
                cout << "    Nome: " << aux->info.GetNome();
                cout << " " << aux->info.GetSobreNome();
                aux = aux->next;
            }
        } else
            cout << "lista vazia" << endl;
    }
    Main:
    /* 
     * File:   main.cpp
     * Author: mutiley
     *
     * Created on 11 de Junho de 2012, 22:11
     */
    
    #include <cstdlib>
    #include "Lista.h"
    #include "Paciente.h"
    using namespace std;
    
    int main(int argc, char** argv) {
        bool deuCerto;
        Paciente p1(1, "Arthur", "Giovanini", 1);
        Paciente p2(2, "Nome", "Sobrenome", 0);
        Paciente p3(3, "Nome", "Sobrenome", 0);
        Paciente p4(4, "Nome", "Sobrenome", 0);
        cout << "fez paciente" << endl;
        p1.imprimirPaciente();
        p2.imprimirPaciente();
    
        Lista *l = new Lista();
    
        l->cadastrar(p1, deuCerto);
    
        cout << "asm" << endl;
        l->cadastrar(p2, deuCerto);
        cout << "asmm" << endl;
        l->cadastrar(p3, deuCerto);
        l->cadastrar(p4, deuCerto);
    
        l->imprimir();
    
        return 0;
    }

  3. pessoal estou usando o netbeans.

    Vi que o programa da erro(não sei se tem mais) quando ele entra no " if (primeiro->prox == NULL){ "

    não sei o que fiz de errado...

    espero alguma ajuda.

    abraço

  4. Oi pessoal, estou fazendo um trabalho pra facul onde devo armazenar 4 dados de uma consulta médica. Fiz os métodos para incluir na lista e verificar a lista, mas está dando Exception: STATUS_ACCESS_VIOLATION .

    Não sei onde pode ser o erro.

    Alguém poderia me dar uma ajuda?!

    Segue o código:

    #ifndef AGENDARCONSULTA_H
    #define    AGENDARCONSULTA_H
    #include <stdio.h>
    #include <iostream>
    #include <string>
    using namespace std;
    
    struct agenda {
        string horaInicio;
        string horaFim;
        string dataInicio;
        string dataFim;
        struct agenda *prox;
    };
    
    typedef struct agenda horaMarcada;
    
    //cabecalho da lista
    horaMarcada *primeiro;
    
    class AgendarConsulta {
        horaMarcada c; //celula da lista
        
    public:
        AgendarConsulta(){primeiro->prox = NULL;}
        AgendarConsulta(string hrIn, string hrFim, string dtIn, string dtFim) {
            primeiro->prox = NULL;
            c.horaInicio = hrIn;
            c.horaFim = hrFim;
            c.dataInicio = dtIn;
            c.dataFim = dtFim;
        }
        bool insereConsulta(string hrIn, string hrFim, string dtIn, string dtFim) {
    
            agenda* proximo = NULL;
            agenda* aux = NULL;
    
            //insere no primeiro da lista
            if (primeiro->prox == NULL) {
                *primeiro->prox = c;
                c.horaInicio = hrIn;
                c.horaFim = hrFim;
                c.dataInicio = dtIn;
                c.dataFim = dtFim;
                return true;
            } else {
                proximo = primeiro->prox;
    
                //procura na lista data para insercao
                //se chegar a nulo, fim da lista
                while (proximo->dataInicio < dtIn && proximo->prox != NULL)
                    proximo = proximo->prox;
    
                //insere no ultimo elemento da lista
                if (proximo->prox == NULL) {
                    *proximo->prox = c;
                    c.horaInicio = hrIn;
                    c.horaFim = hrFim;
                    c.dataInicio = dtIn;
                    c.dataFim = dtFim;
                    return true;
                } else{
                    //insere no meio da lista
                    aux->prox = proximo->prox;
                    *proximo->prox = c;
                    c.prox = aux->prox;
                    return true;
                }
            }
            return false;
        }
        
         bool verificaConsulta(string hrIn, string hrFim, string dtIn, string dtFim){
             agenda* proximo = NULL;
             
             while(proximo->prox != NULL){
                 if(c.dataInicio == dtIn && c.dataFim == dtFim 
                         && c.horaInicio == hrIn && c.horaFim == hrFim){
                     return true;               
                 }
                 return false;
             }
         }
         
    };
    #endif    /* AGENDARCONSULTA_H */

×
×
  • Criar Novo...