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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con Directorio en c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Directorio en c++  (Leído 1,749 veces)
Gunhack

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Ayuda con Directorio en c++
« en: 1 Junio 2015, 04:04 am »

Hola buenas! Tengo problemas con este código, estoy leyendo un libro "Estructura de datos con C++" viene un ejercicio de crear un directorio apartir de un archivo de texto, viene el codigo y solamente lo estoy copiando, el problema está (creo) al asignar la memoria no sé como arreglarlo, ojalá puedan decirme que está mal :C gracias!

Directory-Entry.h
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Entrada_Directorio{
  6. public:
  7.  Entrada_Directorio(string _Nombre, string _Numero) : Nombre(_Nombre), Numero(_Numero){}
  8.  Entrada_Directorio(){}
  9.  string dar_Nombre() const {return Nombre;}
  10.  string dar_Numero() const {return Numero;}
  11.  void mod_Numero(const string &nuevo_Numero) {Numero=nuevo_Numero;}
  12. private:
  13.  string Nombre;
  14.  string Numero;
  15. };


Arreglo_PD.h
Código
  1. #include <string>
  2. #include "Directory-Entry.h"
  3.  
  4. using namespace std;
  5.  
  6. class Directorio_Tel{
  7. public:
  8.  Directorio_Tel(){} // Cuando lo pongo como  Directorio_Tel(); me da error al crear el objeto
  9.  ~Directorio_Tel(){}
  10.  
  11.  void cargar_datos(const string &nombre_arch);
  12.  string buscar_nom(const string &Nombre) const;
  13.  string anadir_modif(const string &Nombre, string &Numero);
  14.  string eliminar(const string &Nombre);
  15.  void guardar();
  16.  friend ostream& operator<<(ostream &os, const Directorio_Tel &Tel);
  17. private:
  18.  int buscar(const string &Nombre) const;
  19.  void agregar(const string &Nombre, string &Numero);
  20.  void eliminar(int num);
  21.  void realocar();
  22.  int tamano;
  23.  int capacidad;
  24.  Entrada_Directorio* Directorio;
  25.  string nombre_arch;
  26.  bool modificado;
  27. };
  28.  

Arreglo_PD.cpp
Código
  1. #include "Arreglo_PD.h"
  2. #include <fstream>
  3. #include <conio.h>
  4.  
  5. using namespace std;
  6.  
  7. void Directorio_Tel::cargar_datos(const string &nombre_arch){
  8.  this->nombre_arch=nombre_arch;
  9.  ifstream in(nombre_arch.c_str());
  10.  if (in){
  11.    string Nombre;
  12.    string Numero;
  13.    while (getline(in,Nombre,'\n')){
  14.      if (getline(in,Numero,'\n')){
  15.        cout<<Nombre<<endl;
  16.        cout <<Numero<<endl; //Coloqué esto para ver como se van agregando los nombres...
  17.        agregar(Nombre, Numero); //Desde aqui todo bien al mandar a llamar esta funcion
  18.      }
  19.    }
  20.    in.close();//No entiendo como es que (según el libro) esto logra cargar todo el archivo...
  21.  }
  22. }
  23.  
  24. string Directorio_Tel::buscar_nom(const string &Nombre) const {
  25.  int num=buscar(Nombre);
  26.  if(num!=-1){
  27.    return Directorio[num].dar_Numero();
  28.  } else {
  29.    return "";
  30.  }
  31. }
  32.  
  33. string Directorio_Tel::anadir_modif(const string &Nombre, string &Numero) {
  34.  string numero_ant="";
  35.  int num=buscar(Nombre);
  36.  if(num!=-1){
  37.    numero_ant=Directorio[num].dar_Numero();
  38.    Directorio[num].mod_Numero(Numero);
  39.  }
  40.  modificado=true;
  41.  return numero_ant;
  42. }
  43.  
  44. string Directorio_Tel::eliminar(const string &Nombre){
  45. ;
  46. }
  47.  
  48. void Directorio_Tel::guardar() {
  49.  if (modificado){
  50.    ofstream out(nombre_arch.c_str());
  51.    for(int i=0; i<tamano; i++){
  52.      out << Directorio[i].dar_Nombre() <<endl;
  53.      out << Directorio[i].dar_Numero() <<endl;
  54.    }
  55.    out.close();
  56.    modificado=false;
  57.  }
  58. }
  59.  
  60. int Directorio_Tel::buscar(const string &Nombre) const {
  61.  for(int i=0; i<tamano; i++){
  62.    if (Directorio[i].dar_Nombre()==Nombre)
  63.      return 1;
  64.  }
  65.  return -1;
  66. }
  67.  
  68. void Directorio_Tel::agregar(const string &Nombre, string &Numero) {
  69.  if(tamano==capacidad)
  70.    realocar(); //Aquí llama a la función erronea
  71.  Directorio[tamano]=Entrada_Directorio(Nombre,Numero);
  72.  tamano++;
  73. }
  74.  
  75. void Directorio_Tel::eliminar(int num) {
  76. ;
  77. }
  78.  
  79. //Esta es la funcion que da error
  80. void Directorio_Tel::realocar() {
  81.  capacidad*=2;
  82.  Entrada_Directorio* nuevo_Directorio=new Entrada_Directorio[capacidad];
  83.  getch(); //Este getch lo puse por que después de aquí se hace el error
  84.  for(int i=0; i<tamano; i++){
  85.    nuevo_Directorio[i]=Directorio[i];
  86.  }
  87.  delete[] Directorio;
  88.  Directorio=nuevo_Directorio;
  89. }
  90.  
  91. ostream& operator<<(ostream &os, const Directorio_Tel &Tel) {
  92.  for(int i=0; i<Tel.tamano; i++){
  93.    os<<Tel.Directorio[i].dar_Nombre()<<endl;
  94.    os<<Tel.Directorio[i].dar_Numero()<<endl<<endl;
  95.  }
  96.  return os;
  97. }
  98.  

main()...
Código
  1. #include <iostream>
  2. #include "Arreglo_PD.h"
  3.  
  4. using namespace std;
  5.  
  6. int main(){
  7.  Directorio_Tel D1;
  8.  D1.cargar_datos("Directorio.txt");
  9.  cout << D1;
  10. }
  11.  
  12.  

Nota: Crear el archivo de texto xD De antemano muchas gracias y espero que puedan ayudarme!  :(


« Última modificación: 1 Junio 2015, 07:01 am por Gunhack » En línea

Gunhack

Desconectado Desconectado

Mensajes: 42



Ver Perfil
Re: Ayuda con Directorio en c++
« Respuesta #1 en: 1 Junio 2015, 16:59 pm »

Me respondo a mi mismo  :rolleyes:
Tenia que inicializar esta parte aunque en el libro no lo decía xD
Código
  1. class Directorio_Tel{
  2. public:
  3.  Directorio_Tel():capacidad(0),tamano(0){}
  4.  ~Directorio_Tel(){}
  5.  

Acá tuve que modificar esto pero no se si esté bien lo que hago, el punto es que funciona  :xD
Código
  1. void Directorio_Tel::realocar() {
  2.  
  3.  if(capacidad==0){
  4.    capacidad+=1;
  5.    Directorio=new Entrada_Directorio[capacidad];
  6.  }
  7.  capacidad*=2;
  8.  
  9.  Entrada_Directorio* nuevo_Directorio=new Entrada_Directorio[capacidad];
  10.  for(int i=0; i<tamano; i++){
  11.    nuevo_Directorio[i]=Directorio[i];
  12.  }
  13.  delete[] Directorio;
  14.  Directorio=nuevo_Directorio;
  15. }
  16.  
  17.  

Saludos y gracias :-\


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines