lunes, 18 de julio de 2011

Deitel_Java_6.38 (De Decimal a Binario, Octal y Hexadecimal en Java)

Este programa recibe decimales y los imprime en binario, octal y hexadecimal.
El siguiente código debe guardarse con el nombre UsaConvertir.java



import java.util.Scanner;

 public class UsaConvertir

 {   // Abre clase UsaConvertir

 public static void main( String args[])

 {    // Abre main

 System.out.print("\nEste programa convierte decimales a ");
 System.out.print("binario, octal y hexadecimal.\n");
 Scanner entrada = new Scanner(System.in);

 Convertir miObjeto = new Convertir();

 int numero;

 System.out.print("\nPor favor introduzca un numero ");
 System.out.println("y se imprimira su equivalente en binario: ");

 numero = entrada.nextInt();

 miObjeto.Binario( numero );

 System.out.print("\nPor favor introduzca un numero ");
 System.out.println("y se imprimira su equivalente en octal: ");

 numero = entrada.nextInt();

 miObjeto.Octal( numero );

 System.out.print("\nPor favor introduzca un numero ");
 System.out.println("y se imprimira su equivalente en hexadecimal: ");

 numero = entrada.nextInt();

 miObjeto.Hexadecimal( numero );

 }    // Cierra main

 }   // Cierra clase UsaConvertir





El siguiente código debe guardarse con el nombre Convertir.java





 public class Convertir

 {    // Abre clase Convertir

 // La variable Tamano controla el numero de 
 // simbolos que se requieren para hacer la conversion
 // Para llevar un registro de los simbolos se usa un
 // arreglo. Estos se deben guardar porque se van generando
 // de derecha a izquierda, pero la impresion es de 
 // izquierda a derecha.

 private int Tamano = 20;
 private int[] a = new int[Tamano];

 /////////////////////////////////////
 // METDODO BINARIO 
 /////////////////////////////////////

 public void Binario( int x )

 {     // Abre metodo Binario 

 System.out.println("\nAqui esta el numero en notacion binaria: ");

 // Se llena el arreglo con ceros

 for ( int i = 0; i < Tamano; i++ )
 {  // Abre for
 a[i] = 0;
 }  // Cierra for

 int j = 0;

 while ( 0 != x )
 {   // Abre while

 if ( 0 != x % 2 )
 {   // Abre if
 a[j++] = x % 2;

 // Se resta el residuo
 x -= x % 2;

 // Se divide entre 2
 x /= 2;

 }   // Cierra if

 else

 {     // Abre else
 a[j++] = 0;

 // Se cambia x
 x /= 2;

 }     // Cierra else

 }   // Cierra while

 // El numero en binario, que se ha guardado
 // en el arreglo, se manda a imprimir

 Imprimir();

 }     // Cierra metodo Binario 



 /////////////////////////////////////
 // METDODO OCTAL
 /////////////////////////////////////

 public void Octal( int x )

 {     // Abre metodo Octal
 System.out.println("\nAqui esta el numero en notacion octal: ");

 // Las entradas del arreglo se llenan con 0

 for ( int i = 0; i < Tamano; i++ )
 {  // Abre for

 a[i] = 0;

 }  // Cierra for

 int j = 0;

 while ( 0 != x )

 {   // Abre while

 if ( 0 != x % 8 )

 {   // Abre if

 a[j++] = x % 8;
 // Se resta el residuo
 x -= x % 8;
 // Se divide entre 8
 x /= 8;

 }   // Cierra if

 else

 {     // Abre else

 a[j++] = 0;
 // Se cambia x
 x /= 8;

 }     // Cierra else

 }   // Cierra while

 // El numero en octal, que se ha guardado
 // al reves en el arreglo a, se manda a 
 // imprimir

 Imprimir();

 }     // Cierra metodo Octal 



 /////////////////////////////
 // METODO HEXADECIMAL
 /////////////////////////////



 public void Hexadecimal ( int x )

 {     // Abre metodo Hexadecimal

 // El arreglo se llena con 0 

 for ( int i = 0; i < Tamano; i++ )
 {  // Abre for

 a[i] = 0;

 }  // Cierra for

 System.out.print("\nAqui esta el numero en notacion ");
 System.out.println("hexadecimal: ");

 int contador = 0;

 while ( 0 != x )

 {       // Abre while

 // Si el  numero no es multiplo de 16
 // lo cual es lo mas probable (por eso
 // se coloca primero esta condicion)

 if ( 0 != x % 16 )

 {   // Abre if

 // Se imprime el residuo de la division
 //Imprimir( x % 16 );

 a[contador++] = x % 16;

 // Ahora x es x - residuo 
 x -= x % 16; 

 // Ahora se divide x entre 16
 x /= 16;

 }   // Cierra if

 // De lo contrario
 // Esto es, si x es multiplo de 16

 else

 {     // Abre else

 // System.out.print("0");

 a[contador++] = 0;

 //Ahora x es x/16
 x /= 16;

 }     // Cierra else

 }     // Cierra while

 System.out.println("\n");

 // El numero en notacion hexadecimal, que se ha
 // guardado en el arreglo a se manda a imprimir 

 Imprimir();

 }     // Cierra metodo Hexadecimal

     



 ///////////////////////////////////
 //METODO IMPRIMIR
 ///////////////////////////////////

 public void Imprimir(  )

 {      // Abre metodo Imprimir

 // El arreglo se imprime de la ultima posicion
 // a la primera. Sin embargo, es muy probable 
 // que las ultimas sean 0. Como estan a la derecha
 // no es necesario imprimirlos. La variable estatus
 // inicia con "afuera", lo cual indica que los ceros 
 // no deben imprimirse

 String estatus = "afuera";



 for ( int i = Tamano - 1; i >= 0; i-- )

 switch ( a[i] )

 {       // Abre switch

 case 0:

 if ( "adentro" == estatus )

 System.out.printf("0");
 break;

 case 1:
 System.out.printf("1");
 estatus = "adentro";

 break;
 case 2:
 System.out.printf("2");
 estatus = "adentro";
 break;

 case 3:
 System.out.printf("3");
 estatus = "adentro";
 break;

 case 4:
 System.out.printf("4");
 estatus = "adentro";
 break;

 case 5:
 System.out.printf("5");
 estatus = "adentro";
 break;

 case 6:
 System.out.printf("6");
 estatus = "adentro";
 break;

 case 7:
 System.out.printf("7");
 estatus = "adentro";
 break;

 case 8:
 System.out.printf("8");
 estatus = "adentro";

 break;
 case 9:
 System.out.printf("9");
 estatus = "adentro";
 break;

 case 10:
 System.out.printf("A");
 estatus = "adentro";
 break;

 case 11:
 System.out.printf("B");
 estatus = "adentro";
 break;
 case 12:

 System.out.printf("C");
 estatus = "adentro";
 break;

 case 13:
 System.out.printf("D");
 estatus = "adentro";
 break;

 case 14:
 System.out.printf("E");
 estatus = "adentro";
 break;

 case 15:
 System.out.printf("F");
 estatus = "adentro";
 break;

 }       // Cierra switch

 // Es probable que se haya introducido el numero 0
 // y en este caso la variable estatus permanecio
 // como "afuera" y no se imprimio el 0.

 if ( "afuera" == estatus )

 System.out.printf("0");
 System.out.println("\n");

 }      // Cierra metodo Imprimir  

 }    // Cierra clase Convertir




3 comentarios:

  1. Hola hola, disculpa acepta Numeros DECIMALES CON DECIMALES???
    POR EJEMPLO 234.567????

    ResponderEliminar
  2. Hola. El programa no recibe decimales con puntos. He estado pensando y es interesante. Lo importante de estos sistemas posicionales es que se aplican los mismos algoritmos desarrollados por los árabes que ya conocemos para las operaciones aritméticas básicas. Creo que hay que escribir un programa que divida dos cifras en binario y de ahí generalizarlo para cualquier sistema.
    Saludos.

    ResponderEliminar
  3. No tengo idea de como empezar a hacer eso =D Lo intentare,haber que resulta. =) Gracias.

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...