Underc0de

Programación General => Java => Mensaje iniciado por: darkbouser en Diciembre 27, 2014, 01:23:10 PM

Título: Conversor de números decimales a binario
Publicado por: darkbouser en Diciembre 27, 2014, 01:23:10 PM
 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) [Seleccionar]

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

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

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.
Título: Re:Conversor de números decimales a binario
Publicado por: Flemon en Enero 14, 2015, 11:43:52 AM
Lindo Codigo, se ve bueno, sigue creando cosas!!! un abrazo
Título: Re:Conversor de números decimales a binario
Publicado por: DeBobiPro en Enero 14, 2015, 11:50:49 AM
nunca está de más un código así!

Se agradece SALUDOS!
Título: Re:Conversor de números decimales a binario
Publicado por: Hu3c0 en Febrero 09, 2015, 03:31:16 PM
Aqui te pongo mi código para pasar de decimal a binario:

Código (java) [Seleccionar]
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