10/04/2016

Ejercicio 23

Haga un algoritmo que permita convertir un número decimal a binario, y que el resultado en binario se guarde en un vector.


#include <iostream>
//Se incluye la clase Convertir para despues llamar a sus metodos
#include "Convertir.h"

using namespace std;

int main(void)
{
    //Se crea un objeto de la clase Convertir (Instanciaciación)
    Convertir *obj = new Convertir();
    //se define una variable "n" de tipo entero
    int n;
    //Se pide que se digite el numero decimal
    cout << "Digite numero decimal" << endl;
    cout << ">> ";
    //se guarda el digito en la variable "n"
    cin >> n;
    obj->setNum(n);//se encapsula la variable n
    obj->contarDatos();//se llama al metodo contarDatos()
    obj->crearVector();//se llama al metodo crearVector()
    obj->toBinary();//se llama al metodo toBinary()

    //se muestra el numero decimal
    cout << "DEC " << obj->getNum() << endl;
    //se muestra el texto "BIN" (BINARIO)
    cout << "BIN ";
    //se recorre el vector desde la posicion ultima hasta la primera
    for(int i = obj->getTam(); i >= 0; i--)
    {
        //se muestra el valor en binario que haya en cada posicion (0 ó 1)
        cout << obj->getDatos(i);
    }
}
     

#ifndef CONVERTIR_H
#define CONVERTIR_H


class Convertir
{
    public:
        Convertir();
        virtual ~Convertir();
        //se definen los metodos publicos:
        void contarDatos();//contarDatos() tendra la funcion de contar el tamaño del vector
        void crearVector();//crearVector() se le asigna el tamaño que haya contado el metodo contarDatos()
        void toBinary();//convertira a binario

        //se definen los metodos Setters y Getters de la clase
        void setNum(int n);
        int getNum();
        void setTam(int n);
        int getTam();
        void setDatos(int p, int n);
        int getDatos(int p);
    protected:

    private:
        //se definen los atributos privados de la clase
        int num;//"num" de tipo entero
        int tam;//"tam" de tipo entero
        int *datos;//el vector *datos de tipo entero
};

#endif // CONVERTIR_H
     

#include "Convertir.h"

Convertir::Convertir()
{
    //se definen los valores de 0 por defecto en el constructor de la clase
    // a "num" y "tam"
    num = 0;
    tam = 0;
}

Convertir::~Convertir()
{
    //dtor
}

//Implementacion del metoodo crearVector
void Convertir::crearVector()
{
    //se crea una nueva instancia al vector "datos" y tendra un tamaño de "tam"
    datos = new int[tam];
}

//Implementacion del metodo contarDatos
void Convertir::contarDatos()
{
    //definimos una variable "aux" de tipo entero y se inicializa en "num"
    int aux = num;
    //se definen "pos" de tipo entero y se inicializa en 0, y "res"
    int pos = 0, res;

    //si el "num" que se digito es igual a 1 entonces:
    if(num == 1)
    {
        //al setTam se le asignara 0 (sera la primera posicion del vector datos)
        setTam(0);
    }
    else if(num == 0)//sino, si num es igual a 0 entonces:
    {
        //al setTam se le asignara 0 (sera la primera posicion del vector datos)
        setTam(0);
    }
    else//sino
    {
        //haga esto:
        do
        {
            //se le asigna el residuo de "aux" entre "2" a la variable "res"
            res = aux%2;
            //se incrementa pos
            pos++;
            //se le asigna la division de "aux" entre 2 a la variable "aux"
            aux = aux / 2;
        }
        while(aux != 1);//mientras aux sea diferente de 1, repetira las instrucciones...
        setTam(pos);//se le asigna a setTam, el valor de pos (sera la posicion del vector)
    }
}

//Implementacion del metodo toBinary
void Convertir::toBinary()
{
    //definimos una variable "aux" de tipo entero y se inicializa en "num"
    int aux = num;
    //se definen "pos" de tipo entero y se inicializa en 0, y "res"
    int pos = 0, res;

    //si el "num" que se digito es igual a 1 entonces:
    if(aux == 1)
    {
        //se le asigna 1 en la posicion 0 del vector "datos"
        datos[0] = 1;
    }
    else if(aux == 0)//sino, si num es igual a 0 entonces:
    {
        //se le asigna 1 en la posicion 0 del vector "datos"
        datos[0] = 0;
    }
    else//sino
    {
        //haga esto:
        do
        {
            //se le asigna el residuo de "aux" entre "2" a la variable "res"
            res = aux%2;
            //se le asigna el residuo "res" en la posicion "pos" del vector "datos"
            datos[pos] = res;
            //se incrementa pos
            pos++;
            //se le asigna la division de "aux" entre 2 a la variable "aux"
            aux = aux / 2;
            if(aux == 1)//si aux es igual a 1 entonces
            {
                //se le asigna 1, en la posicion "pos" del vector "datos"
                datos[pos] = 1;
            }
        }
        while(aux != 1);//mientras aux sea diferente de 1, repetira las instrucciones...
    }
}

//Implementacion de los metodos Setters y Getters de los atributos de la clase...
void Convertir::setNum(int n)
{
    num = n;
}

int Convertir::getNum()
{
    return num;
}

void Convertir::setDatos(int p, int n)
{
    datos[p] = n;
}

int Convertir::getDatos(int p)
{
    return datos[p];
}

void Convertir::setTam(int n)
{
    tam = n;
}

int Convertir::getTam()
{
    return tam;
}
     

PRONTO...
     

PRONTO...