Ejercicio, Programación Orientada a Objetos.. URGENTEE!!

Iniciado por LauraD, 9 Septiembre 2014, 02:19 AM

0 Miembros y 1 Visitante están viendo este tema.

LauraD

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 (cpp) [Seleccionar]

//6.Programa que pase un decimal a binario

#include<iostream>
#include<cstdlib>

using namespace std;

class Decimal
{
 
  private:
  int i,j;
  int Num,Num2;
  int Res;
  int Vec[10];
 
 
  public:
  void Leer(void);
  void Proceso(void);
  void Imprimir(void);
  };
 
  void Decimal::Leer(void)
  {
       cout<<"Ingrese el numero del que desea conocer su equivalencia en binario"<<endl;
       cin>>Num;
       Num2=Num;
  }
 
  void Decimal::Proceso(void)
  {
         for(i=1;i<=Num;i++)
          {
            Num2=Num2/2;
         
            if(Num2==1)
            {
              break;
            }
          }
         
          for(j=1;j<=i;j++)
          {
             Res=Num%2;
             
             if(Res==1)
             {
               Vec[j]=1;
             }
             
             else
             {
                if(Res==0)
                {
                   Vec[j]=0;
                   Num=Num/2;
                }
             }
          }
       }

 
void Decimal::Imprimir(void)     
{
     if(Num==0 || Num==1)
     {
       cout<<"El numero ingresado en binario es "<<Num<<endl;
     }
     
     else
     {
       cout<<"El numero "<<Num<<" en binario es:"<<endl;
         
       cout<<"1";
     
       for(j=i;j>0;j--)
       {
         cout<<Vec[j];
       }
     }
}

int main ()
{
Decimal Binario;
Binario.Leer();
Binario.Proceso();
Binario.Imprimir();

system ("PAUSE");
return EXIT_SUCCESS;
}

kutcher

Cita de: LauraD en  9 Septiembre 2014, 02:19 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 (cpp) [Seleccionar]
void Decimal::Proceso(void)
{
    for(i = 0; num; i++)
    {
        res = num % 2;
        vec[i] = res;
        num = num / 2;
    }
}


Y con la función Imprimir de igual manera :

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


Saludos kutcher

eferion

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 (cpp) [Seleccionar]

#include <iostream>
#include <string>

using namespace std;

class Decimal
{
  private:
    int numeroDecimal;
    std::string numeroBinario;

  public:

    // Constructor por defecto
    Decimal( );

    void Leer();
    void Proceso();
    void Imprimir();
};

// Implementación del constructor por defecto.
Decimal::Decimal( )
{
  numeroDecimal = 0;
}

void Decimal::Leer()
{
  cout<<"Ingrese el numero del que desea conocer su equivalencia en binario"<<endl;
  cin>>numeroDecimal;
}

void Decimal::Proceso()
{
  int numero = numeroDecimal;

  if ( numero == 0 )
    numeroBinario = "0";

  while ( numero )
  {
    int digito = numero % 2;
    numero /= 2;

    // Los nuevos valores los vamos añadiendo al inicio de la cadena para que la impresión del
    // resultado sea más sencilla.
    numeroBinario.insert( 0, 1, '0' + digito );
  }
}

void Decimal::Imprimir()
{
  cout<<"El numero "<< numeroDecimal <<" en binario es: " << numeroBinario << endl;
}