Jump to content
Fórum Script Brasil

muttleydm

Membros
  • Content Count

    6
  • Joined

  • Last visited

Community Reputation

0 Neutro

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

    Problema com lista

    bom pessoal..esquecam o problema ai. já resolvi aqui. abraço
  4. muttleydm

    Problema com lista

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

    Problema com lista

    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 */
×
×
  • Create New...