Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: LauraD en 9 Septiembre 2014, 02:19 am



Título: Ejercicio, Programación Orientada a Objetos.. URGENTEE!!
Publicado por: LauraD en 9 Septiembre 2014, 02:19 am
Buenas noches!

Tengo que eleborar un algoritmo en el que se convierta un número decimal en un número binario... Al realizar la programación estructurada del problema me compila y ejecuta muy bien, pero en el momento en el que pase todo a orientada al momento de ejecutar me muestra errores..

Por favor podrian decirme que es lo que esta fallando, se los agradeceria mucho!

Este es el código..

Código
  1. //6.Programa que pase un decimal a binario
  2.  
  3. #include<iostream>
  4. #include<cstdlib>
  5.  
  6. using namespace std;
  7.  
  8. class Decimal
  9. {
  10.  
  11.  private:
  12.  int i,j;
  13.  int Num,Num2;
  14.  int Res;
  15.  int Vec[10];
  16.  
  17.  
  18.  public:
  19.  void Leer(void);
  20.  void Proceso(void);
  21.  void Imprimir(void);
  22.  };
  23.  
  24.  void Decimal::Leer(void)
  25.  {
  26.       cout<<"Ingrese el numero del que desea conocer su equivalencia en binario"<<endl;
  27.       cin>>Num;
  28.       Num2=Num;
  29.  }
  30.  
  31.  void Decimal::Proceso(void)
  32.  {
  33.         for(i=1;i<=Num;i++)
  34.          {
  35.            Num2=Num2/2;
  36.  
  37.            if(Num2==1)
  38.            {
  39.              break;
  40.            }
  41.          }
  42.  
  43.          for(j=1;j<=i;j++)
  44.          {
  45.             Res=Num%2;
  46.  
  47.             if(Res==1)
  48.             {
  49.               Vec[j]=1;
  50.             }
  51.  
  52.             else
  53.             {
  54.                if(Res==0)
  55.                {
  56.                   Vec[j]=0;
  57.                   Num=Num/2;
  58.                }
  59.             }
  60.          }
  61.       }
  62.  
  63.  
  64. void Decimal::Imprimir(void)      
  65. {
  66.     if(Num==0 || Num==1)
  67.     {
  68.       cout<<"El numero ingresado en binario es "<<Num<<endl;
  69.     }
  70.  
  71.     else
  72.     {
  73.       cout<<"El numero "<<Num<<" en binario es:"<<endl;
  74.  
  75.       cout<<"1";
  76.  
  77.       for(j=i;j>0;j--)
  78.       {
  79.         cout<<Vec[j];
  80.       }
  81.     }
  82. }
  83.  
  84. int main ()
  85. {
  86. Decimal Binario;
  87. Binario.Leer();
  88. Binario.Proceso();
  89. Binario.Imprimir();
  90.  
  91. system ("PAUSE");
  92. return EXIT_SUCCESS;
  93. }
  94.  


Título: Re: Ejercicio, Programación Orientada a Objetos.. URGENTEE!!
Publicado por: kutcher en 9 Septiembre 2014, 06:00 am
pero en el momento en el que pase todo a orientada al momento de ejecutar me muestra errores..

La función Proceso la puedes simplificar bastante no hay necesidad de complicarse por algo tan simple :

Código
  1. void Decimal::Proceso(void)
  2. {
  3.    for(i = 0; num; i++)
  4.    {
  5.        res = num % 2;
  6.        vec[i] = res;
  7.        num = num / 2;
  8.    }
  9. }
  10.  

Y con la función Imprimir de igual manera :

Código
  1. void Decimal::Imprimir(void)
  2. {
  3.    cout << "El numero " << num << " en binario es: ";
  4.    for (j = i - 1; j >= 0; j--)
  5.       cout << vec[j];
  6. }

Saludos kutcher


Título: Re: Ejercicio, Programación Orientada a Objetos.. URGENTEE!!
Publicado por: eferion en 9 Septiembre 2014, 08:44 am
Aparte de lo comentado por kutcher te pongo un par de comentarios adicionales:

* Las variables i, j, Num2 y Res deberían ser variables locales definidas en funciones y no en el cuerpo de la clase, ya que únicamente las usas para calcular resultados parciales.

* Para almacenar la secuencia binaria puedes usar la clase "string" o la clase "vector".

* A diferencia de C, en C++ no es necesario poner "void" en las funciones que no reciben argumentos.

* Si se llama a "Imprimir" sin llamar antes a "Leer" vas a imprimir basura. Para evitar eso necesitas hacer uso del constructor por defecto. El constructor se llama automáticamente al crear el objeto, por lo que es un lugar ideal para inicializar las variables de la clase.

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class Decimal
  7. {
  8.  private:
  9.    int numeroDecimal;
  10.    std::string numeroBinario;
  11.  
  12.  public:
  13.  
  14.    // Constructor por defecto
  15.    Decimal( );
  16.  
  17.    void Leer();
  18.    void Proceso();
  19.    void Imprimir();
  20. };
  21.  
  22. // Implementación del constructor por defecto.
  23. Decimal::Decimal( )
  24. {
  25.  numeroDecimal = 0;
  26. }
  27.  
  28. void Decimal::Leer()
  29. {
  30.  cout<<"Ingrese el numero del que desea conocer su equivalencia en binario"<<endl;
  31.  cin>>numeroDecimal;
  32. }
  33.  
  34. void Decimal::Proceso()
  35. {
  36.  int numero = numeroDecimal;
  37.  
  38.  if ( numero == 0 )
  39.    numeroBinario = "0";
  40.  
  41.  while ( numero )
  42.  {
  43.    int digito = numero % 2;
  44.    numero /= 2;
  45.  
  46.    // Los nuevos valores los vamos añadiendo al inicio de la cadena para que la impresión del
  47.    // resultado sea más sencilla.
  48.    numeroBinario.insert( 0, 1, '0' + digito );
  49.  }
  50. }
  51.  
  52. void Decimal::Imprimir()
  53. {
  54.  cout<<"El numero "<< numeroDecimal <<" en binario es: " << numeroBinario << endl;
  55. }