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
Hola hola, disculpa acepta Numeros DECIMALES CON DECIMALES???
ResponderEliminarPOR EJEMPLO 234.567????
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.
ResponderEliminarSaludos.
No tengo idea de como empezar a hacer eso =D Lo intentare,haber que resulta. =) Gracias.
ResponderEliminar