elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Manejo de listas y punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Manejo de listas y punteros  (Leído 2,267 veces)
PipeCR

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Manejo de listas y punteros
« en: 16 Septiembre 2016, 05:00 am »

Hola, tengo un problema al correr mi programa, se cae al correrlo, ya llevo algunas horas buscando el problema, como soy estudiante aun me cuesta un poco, agradeceria la ayuda.
El codigo debe de ingresar lo datos de un archivo .txt en una lista enlazada (Todos los datos), aca abajo dejo el codigo.

Código
  1. #include <iostream>
  2. #include <cstdio>
  3. #include "Empleados.h"
  4. #include "Empleados.h"
  5. #include "Interfaz.h"
  6. #include "Nodo.h"
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.    Nodo *Cabeza;
  12.    Cabeza = new Nodo;
  13.    FILE *Archivo1;
  14.    Archivo1 = fopen("Empleados.txt","r+");
  15.    if(Archivo1==NULL){
  16.        cout<<"No se pudo abrir el archivo.";
  17.        return 0;
  18.    }
  19.    Nodo *Ant;
  20.    Nodo *Aux;
  21.    Aux = Cabeza;
  22.    int Contador = 1;
  23.    while(feof(Archivo1)==0){
  24.            if(Aux->getActual()==NULL){
  25.                Empleados *NuevaLista;
  26.                NuevaLista = new Empleados();
  27.                Aux->setActual(NuevaLista);
  28.            }
  29.            for(int i=0;i<15&&feof(Archivo1)==0;i++){
  30.                char Caracter;
  31.                for(int j=0;j<150;j++){
  32.                    Caracter = fgetc(Archivo1);
  33.                    Aux->getActual()->setMatrizE(i, j, Caracter);
  34.                    if(Caracter=='@')j=200;
  35.                    Contador++;
  36.                }
  37.                Aux->getActual()->setPosE(i, Contador);
  38.            }
  39.            Aux->setAnt(Ant);
  40.            Nodo *Nuevo;
  41.            Nuevo = new Nodo();
  42.            Aux->setSig(Nuevo);
  43.            Ant= Aux;
  44.            Aux = Aux->getSig();
  45.    }
  46.    fclose(Archivo1);
  47.    return 0;
  48. }
  49.  
  50.  


Tambien se usan estas dos clases:

Código
  1. class Empleados
  2. {
  3.    public:
  4.        Empleados();
  5.        virtual ~Empleados();
  6.  
  7.        //Gets y Sets
  8.        void setMatrizE(int y, int x, char a);
  9.        char getMatrizE(int y, int x);
  10.        void setPosE(int x, int dato);
  11.        int getPosE(int x);
  12.  
  13.        //Metodos
  14.        void Eliminar(int y, int x);
  15.        bool Buscar(char x[9]);
  16.        int Buscar2(char x[9]);
  17.        void ModificarCed(int y, char z[9]);
  18.        void ModificarNom(int y,char z[50]);
  19.        void ModificarCargo(int y, char z[50]);
  20.        void Insertar(char x[150]);
  21.  
  22.  
  23.    protected:
  24.  
  25.    private:
  26.        char MatrizE[15][150];
  27.        int PosE[15];
  28. };
  29.  
  30.  
  31.  
  32.  
  33.  
  34. class Nodo
  35. {
  36.    public:
  37.        Nodo();
  38.        virtual ~Nodo();
  39.        void AgregarNodo(Nodo *c, Empleados *Nuevo);
  40.        void setSig(Nodo *EmpleadosSig);
  41.        void setAnt(Nodo *EmpleadosAnt);
  42.        Nodo *getSig();
  43.        Nodo *getAnt();
  44.        Empleados *getActual();
  45.        void setActual(Empleados *EmpleadoActual);
  46.  
  47.  
  48.    protected:
  49.  
  50.    private:
  51.        Empleados *Actual;
  52.        Nodo *Sig;
  53.        Nodo *Ant;
  54. };
  55.  


En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Manejo de listas y punteros
« Respuesta #1 en: 16 Septiembre 2016, 06:18 am »

Hola te falto mostrar la implementacion de tus clases, ademas cuesto un poco leer tu codigo te recomendaria ir separando todo en clases y diferentes archivos para no liarte.

Ejemplo me implemente una posible lista enlazada simple de esta forma

Código
  1. #include <iostream>
  2. #include "ListaEmpleado.h"
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    ListaEmpleado empleados;
  8.  
  9.    empleados.agregarEmpleado("jose rene",10,'M',"cocinero",1000);
  10.    empleados.agregarEmpleado("Martin ocampo",23,'M',"informatico",3000);
  11.    empleados.agregarEmpleado("Sarali martinez",32,'F',"abogada",25666);
  12.    empleados.agregarEmpleado("Laura nuno",23,'F',"medico",1000);
  13.    empleados.agregarEmpleado("Miguel de la madrid",10,'M',"conductor",4566);
  14.    empleados.agregarEmpleado("Mariano perez",33,'M',"maestro",12334);
  15.  
  16.    empleados.mostrarEmpleados();
  17.    cout<<"Numero de empleados "<<empleados.getTamanoLista()<<endl;
  18.  
  19.    return 0;
  20. }

Clase Empleado

Código
  1. #ifndef EMPLEADO_H
  2. #define EMPLEADO_H
  3. #include<iostream>
  4.  
  5. class Empleado
  6. {
  7.    public:
  8.        Empleado(std::string nombre,int edad,char sexo,std::string profesion,float sueldo);
  9.  
  10.        //gettter y setters
  11.        std::string getNombre();
  12.        int getEdad();
  13.        char getSexo();
  14.        std::string getProfesion();
  15.        float getSueldo();
  16.  
  17.        void setNombre(std::string nombre);
  18.        void setEdad(int edad);
  19.        void setSexo(char sexo);
  20.        void setProfesion(std::string profesion);
  21.        void setSueldo(float sueldo);
  22.  
  23.  
  24.  
  25.    private:
  26.        std::string nombre;
  27.        int edad;
  28.        char sexo;
  29.        std::string profesion;
  30.        float sueldo;
  31. };
  32.  
  33. #endif // EMPLEADO_H


Código
  1. #include "Empleado.h"
  2. using namespace std;
  3.  
  4. Empleado::Empleado(std::string nombre, int edad, char sexo, std::string profesion, float sueldo)
  5. {
  6.   this->nombre=nombre;
  7.   this->edad=edad;
  8.   this->sexo=sexo;
  9.   this->profesion=profesion;
  10.   this->sueldo=sueldo;
  11. }
  12.  
  13.  
  14. string Empleado::getNombre()
  15. {
  16.   return nombre;
  17. }
  18.  
  19. int Empleado::getEdad()
  20. {
  21.    return edad;
  22. }
  23.  
  24. char Empleado::getSexo()
  25. {
  26.    return sexo;
  27. }
  28.  
  29. string Empleado::getProfesion()
  30. {
  31.    return profesion;
  32. }
  33.  
  34. float Empleado::getSueldo()
  35. {
  36.    return sueldo;
  37. }
  38.  
  39. void Empleado::setNombre(std::string nombre)
  40. {
  41.    this->nombre=nombre;
  42. }
  43.  
  44. void Empleado::setEdad(int edad)
  45. {
  46.    this->edad=edad;
  47. }
  48.  
  49. void Empleado::setSexo(char sexo)
  50. {
  51.    this->sexo=sexo;
  52. }
  53.  
  54. void Empleado::setProfesion(std::string profesion)
  55. {
  56.    this->profesion=profesion;
  57. }
  58.  
  59. void Empleado::setSueldo(float sueldo)
  60. {
  61.    this->sueldo=sueldo;
  62. }
  63.  

Clase Nodo

Código
  1. #ifndef NODO_H
  2. #define NODO_H
  3. #include "Empleado.h"
  4. #include<string>
  5.  
  6. class Nodo
  7. {
  8.    public:
  9.        Nodo(std::string nombre,int edad,char sexo,std::string profesion,float sueldo);
  10.        Empleado empleado;
  11.        Nodo* siguiente;
  12.  
  13. };
  14.  
  15. #endif // NODO_H
  16.  


Código
  1. #include "Nodo.h"
  2. using namespace std;
  3.  
  4. Nodo::Nodo(std::string nombre, int edad, char sexo, std::string profesion, float sueldo)
  5. :empleado(nombre,edad,sexo,profesion,sueldo)
  6. {
  7.  
  8. }
  9.  

Clase ListaEmpleado

Código
  1. #ifndef LISTAEMPLEADO_H
  2. #define LISTAEMPLEADO_H
  3. #include "Nodo.h"
  4. #include<string>
  5.  
  6. class ListaEmpleado
  7. {
  8.    public:
  9.        ListaEmpleado();
  10.        void agregarEmpleado(std::string nombre,int edad,char sexo,std::string profesion,float sueldo);
  11.        Empleado getEmpleado(int indice);
  12.        int getTamanoLista();
  13.        void mostrarEmpleados();
  14.        ~ListaEmpleado();
  15.  
  16.  
  17.    private:
  18.        Nodo* apuntador;
  19.        int tamano;
  20. };
  21.  
  22. #endif // LISTAEMPLEADO_H
  23.  

Código
  1. #include "ListaEmpleado.h"
  2. #include "Empleado.h"
  3. using namespace std;
  4.  
  5.  
  6. ListaEmpleado::ListaEmpleado()
  7. {
  8.    this->apuntador=NULL;
  9.    this->tamano=0;
  10. }
  11.  
  12.  
  13. void ListaEmpleado::agregarEmpleado(std::string nombre, int edad, char sexo, std::string profesion, float sueldo)
  14. {
  15.    Nodo* registroNuevo=new Nodo(nombre,edad,sexo,profesion,sueldo);
  16.  
  17.    if(registroNuevo!=NULL){
  18.        registroNuevo->siguiente=NULL;
  19.  
  20.        if(apuntador==NULL){
  21.            apuntador=registroNuevo;
  22.            tamano++;
  23.        }
  24.        else{
  25.           Nodo* apuntadorAuxiliar=apuntador;
  26.  
  27.           while(apuntadorAuxiliar->siguiente!=NULL){
  28.                apuntadorAuxiliar=apuntadorAuxiliar->siguiente;
  29.           }
  30.           apuntadorAuxiliar->siguiente=registroNuevo;
  31.           tamano++;
  32.        }
  33.    }
  34. }
  35.  
  36. void ListaEmpleado::mostrarEmpleados()
  37. {
  38.    Nodo* apuntadorAuxiliar=apuntador;
  39.  
  40.    while(apuntadorAuxiliar!=NULL){
  41.        Empleado actual=apuntadorAuxiliar->empleado;
  42.        cout<<"Nombre "<<actual.getNombre()<<endl;
  43.        cout<<"Sexo "<<actual.getSexo()<<endl;
  44.        cout<<"Profesion "<<actual.getProfesion()<<endl;
  45.        cout<<"Sueldo "<<actual.getSueldo()<<endl;
  46.        apuntadorAuxiliar=apuntadorAuxiliar->siguiente;
  47.        cout<<endl;
  48.    }
  49. }
  50.  
  51.  
  52.  
  53. Empleado ListaEmpleado::getEmpleado(int indice)
  54. {
  55.    Empleado empleado(" ",0,' '," ",0.0);
  56.    int contador=0;
  57.    Nodo* apuntadorAuxiliar=apuntador;
  58.  
  59.    while(apuntadorAuxiliar->siguiente!=NULL){
  60.        if(contador==indice){
  61.            return apuntadorAuxiliar->empleado;
  62.        }
  63.    }
  64.    return empleado;
  65. }
  66.  
  67. int ListaEmpleado::getTamanoLista()
  68. {
  69.    return this->tamano;
  70. }
  71.  
  72.  
  73. ListaEmpleado::~ListaEmpleado()
  74. {
  75.    while(apuntador!=NULL){
  76.       Nodo* actual=apuntador;
  77.       apuntador=apuntador->siguiente;
  78.       delete actual;
  79.    }
  80. }

Espero con este codigo te puedas guiar si tienes dudas comentalo.
Saludos....


« Última modificación: 16 Septiembre 2016, 06:26 am por crack81 » En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
PipeCR

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Manejo de listas y punteros
« Respuesta #2 en: 16 Septiembre 2016, 07:18 am »

Comprendo lo que me tratas de explicar.
Primero y en parte es mi error es que me faltó mencionar que las clases que compartí son de un .h, su diseño está en otro archivo .cpp.
Lo que intentó hacer es cargar en una matriz los datos de 3000 empleados que están en un archivo .txt y se separan de si con un "@". En resumen lo que quiero es cargar 15 empleados en una matriz por lista enlazada.
Para lograrlo diseñé ese algoritmo que está en el main, sin embargo se cae al correrlo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Tutos: obtener datos y manejo de windows con c#... tuto_1: manejo de procesos
Scripting
tongoxcore 2 9,412 Último mensaje 21 Julio 2008, 23:44 pm
por Zaraki_lkenpachi
[C++] Iniciación al manejo de los punteros « 1 2 3 »
Programación C/C++
Horricreu 24 24,082 Último mensaje 18 Noviembre 2010, 01:38 am
por ace332
Ayuda Acerca De Listas y Listas Circulares (Revienta Memoria :S)
Programación C/C++
Gerik 0 6,049 Último mensaje 12 Septiembre 2010, 01:49 am
por Gerik
Problemas con punteros en listas.
Programación C/C++
samur88 6 6,162 Último mensaje 10 Enero 2011, 00:09 am
por samur88
Punteros y ¿Listas?
Programación C/C++
jfap45 3 2,176 Último mensaje 3 Agosto 2012, 22:03 pm
por twins
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines