Conversor de números decimales a binario

Iniciado por darkbouser, Diciembre 27, 2014, 01:23:10 PM

Tema anterior - Siguiente tema

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

Diciembre 27, 2014, 01:23:10 PM Ultima modificación: Diciembre 29, 2014, 08:46:23 AM por Expermicid
 Saludos y felices fiestas.

   Quiero compartir un código que hice ayer por la noche porque estaba aburrido y me gusta estudiar números binarios. Hice un convertidor de números decimales a números binarios en java. Me gustó mucho la manera con que lo hice porque da exactamente el número de bits que le corresponde a cada número a través de una lista simple. Esta aplicación se puede hacer de muchas formas, solo he hecho esta y se que la manera más sencilla es con esta estructura dinámica. El resto fue con propiedades matemáticas y un método sencillo para transformar decimales a binario.

A continuación, les comparto el código fuente de cada clase.

CLASE NODO

Código: java

public class Nodo {
   
    private int _data;
    private Nodo _prox;
   
    public Nodo(int _data)
    {
        this._data = _data;
        this._prox = null;
    }

    public int getData() {
        return _data;
    }

    public void setData(int _data) {
        this._data = _data;
    }

    public Nodo getProx() {
        return _prox;
    }

    public void setProx(Nodo _prox) {
        this._prox = _prox;
    }
   
    public void Mostrar()
    {
        System.out.print(_data);
    }
}


CLASE LISTA SIMPLE
Código: java

public class ListaSimple {
   
    private Nodo _cabeza;
   
    public ListaSimple()
    {
        this._cabeza = null;
    }

    public Nodo getCabeza() {
        return _cabeza;
    }

    public void setCabeza(Nodo _cabeza) {
        this._cabeza = _cabeza;
    }
   
    public void InsertarPrimero(Nodo n)
    {
        if(_cabeza == null)
        {
           _cabeza = n;
        }
        else
        {
           n.setProx(_cabeza);
           _cabeza = n;
        }
    }
   
    public void InsertaFinal(Nodo n)
    {
        if(_cabeza == null)
        {
            _cabeza = n;
           
        }
        else
        {
            Nodo aux = _cabeza;
           
            while(aux.getProx() != null)
            {
                aux = aux.getProx();
            }
           
            aux.setProx(n);
        }
    }
   
    public Nodo EliminaPrimero()
    {
        if(_cabeza == null)
        {
            return null;
        }
        else if(_cabeza.getProx() == null)
        {
           Nodo aux = _cabeza;
           _cabeza = null;
           return aux;
        }
        else
        {
            Nodo aux = _cabeza;
            _cabeza = aux.getProx();
            aux.setProx(null);
            return aux;
           
        }
    }
   

   
    public void EliminarTodo()
    {
       int cont = 0;
       Nodo aux = _cabeza;
       
       while(aux != null)
       {
           cont++;
           aux = aux.getProx();
       }
       
        for (int i = 0; i < cont; i++) {
            this.EliminaPrimero();
        }
    }
   
    public void Mostrar()
    {
        Nodo aux = _cabeza;
       
        while(aux != null)
        {
            aux.Mostrar();
            aux = aux.getProx();
        }
    }
   
}


CLASE APLICACIÓN BINARIO

Código: java

public class Binario {

    /**
     * @param args the command line arguments
     */
   
   
    public int ContarBits(int n ,Binario bin)
    {
     int x = 0;
            for (int i = 1; i <= n; i++) {
               if(bin.EsPotenciade2(i))
               {
                   x++;
               }
        }
           
            return x;
    }
   
   
    public void TransformarBinario(int n, Binario bin, ListaSimple ls)
    {
        int cont = bin.ContarBits(n, bin);
       
         for (int i = 1; i <= cont; i++) {
             
             if(n % 2 == 0)
             {
                 ls.InsertarPrimero(new Nodo(0));
             }
             else
             {
                 ls.InsertarPrimero(new Nodo(1));
             }
             
             n = n / 2;
        }
     
    }
   
    public boolean EsPotenciade2(int n)
    {
        return ((Math.log(n) / Math.log(2)) % 1 == 0);
    }
   
   
   
   
   
    public static void main(String[] args) {
       
        Scanner sc = new Scanner(System.in);
        ListaSimple ls = new ListaSimple();
        Binario bin = new Binario();
        int x = 0;
        int num = 0;
        int rsp = 1;
        while(rsp == 1)
        {   
            System.out.println("Ingrese un numero");
            num = sc.nextInt();
            bin.ContarBits(num, bin);
            bin.TransformarBinario(num, bin, ls);
            ls.Mostrar();
         
            System.out.println("\n Desea convertir otro numero decimal a binario ? si(1), no(0) \n");
            //SE INICIALIZA OTRA VEZ PARA SER UTILIZADO NUEVAMENTE
            num = 0;
            ls.EliminarTodo();
            rsp = sc.nextInt();
        }
    }
   
}



Eso fue todo. Espero que les haya gustado. Saludos otra vez y feliz año nuevo.

Lindo Codigo, se ve bueno, sigue creando cosas!!! un abrazo
No intentes pararme, trata de defenderte, trata de matarme, pero de cualqueir forma TE SUPERARE

nunca está de más un código así!

Se agradece SALUDOS!
Nivel 77 No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Febrero 09, 2015, 03:31:16 PM #3 Ultima modificación: Febrero 09, 2015, 04:06:07 PM por Expermicid
Aqui te pongo mi código para pasar de decimal a binario:

Código: java
public static void main (String [] args){
Scanner sc1 = new Scanner(System.in);
System.out.println("Welcome to Hu3c0 converter decimal a binario");
System.out.println("Introduzca un número entero");
int entradaUno=sc1.nextInt();
System.out.println(" El número que ha introducido es = "+ entradaUno+" En binario es igual a = "+ +Integer.toBinaryString(entradaUno));
}


Espero que te guste, luego también se puede hacer un código en el que vaya dividiendo el número entero por 2 y vaya cogiendo los restos de la división lo vas metiendo en un array una vez el entero no se pueda dividir más por el número dos.
Coges y vas leyendo desde el último número del array hasta cero, más o menos sería esto:

   10 /2
     0  5 /2
          1 2 /2
             0  1 <<<<<<<<coges desde el útlimo hacia arriba y sería  el número 10 == a 1010 en binario

Espero que os haya gustado a mi es que me chiflan las matemáticas

    para hacer lo contrario sería asi:
     1    0    1    0
  2       2    4   10
      1   2    5   10<<<<<<<<<<Este es el número decimal del binario 1010
   

           
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta