El algoritmo consta de los siguientes pasos:
Expresar el número x como una combinación lineal de potencias de dos
x = a0*2⁰ + a1*2¹ + a2*2² + a3*2³ + .....
Y entonces, mientras x != 0 se hace lo siguiente
{
Si x es impar, entonces
el siguiente coeficiente ai es 1
se resta 1 a x
se divide x entre 2
Si x es par, entonces
el siguiente coeficiente ai es 0
se divide x entre 2
}
Tal vez un ejemplo sencillo sea más ilustrativo, sea x = 5
5 se puede expresar como:
5 = a0*2⁰ + a1*2¹ + a2*2² + a3*2³ + ....
como el numero x es impar, entonces a0 = 1
restando 1 en ambos lados de la ecuación se tiene
4 = a1*2¹ + a2*2² + a3*2³ + ....
después se divide entre 2 ambos lados
2 = a1*2⁰ + a2*2¹ + a3*2² + ....
en este caso x es par, por lo cual a1 = 0 se divide todo entre 2 y queda
1 = a2*2⁰ + a3*2¹ +.....
en este caso x es impar, asi que a2 = 1
Se resta 1 en ambos lados y se cumple la condición de que el número x es 0. El
resultado es:
a0 = 1
a1 = 0
a2 = 1
y los otros coeficientes son cero. De esta forma se ha mostrado cómo convertir de decimal a binario el número 5. Éste es el algoritmo que se utiliza en el siguiente programa:
Éste archivo debe guardarse con el nombre: UsaConvertirBinario.java
import java.util.Scanner; public class UsaConvertirBinario { // Abre clase UsaConvertirBinario public static void main( String args[]) { // Abre main System.out.print("\nEste programa convierte decimales a "); System.out.print("binario.\n"); Scanner entrada = new Scanner(System.in); ConvertirBinario miObjeto = new ConvertirBinario(); 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 ); } // Cierra main } // Cierra clase UsaConvertirBinario
El siguiente código debe guardarse con el nombre: ConvertirBinario.java
public class ConvertirBinario { // Abre clase ConvertirBinario /* 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 = 35; /* La variable Tanamo se fija en 35, porque los enteros en java son de 32 bits (4 bytes) y ademas el ultimo se reserva para el signo por lo tanto con 35 se cubre bien el rango*/ 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 /////////////////////////////////// //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; default : System.out.printf("ERROR. EL PROGRAMA ESTA MAL!"); 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 ConvertirBinario
no mustra la clase , solo el metodo ya hecho
ResponderEliminaro estoy mal?
El programa consta de dos archivos, cada uno de los cuales contiene una clase. El primero de ellos es, por decirlo de una manera, el maestro. Contiene al método main en una clase que, por ponerle un nombre, le he llamado UsaConvertirBinario, y es desde donde se llama a los métodos que hacen la tarea, los cuales se encuentran en el segundo archivo, llamado ConvertirBinario.java. En ésta clase se encuentra un par de métodos, el primero, llamado Binario realiza la conversión con el algoritmo explicado arriba. El segundo se llama Imprimir, y es importante, porque las computadoras imprimen los números de izquierda a derecha, pero nosotros debemos imprimir sólo los elementos del arreglo a[] que son significativos, es decir, a partir del primero distinto de 0 que se encuentre en el recorrido de izquierda a derecha. Así que, respondiendo a tu pregunta, éste es un programa completo, en donde aparecen métodos y clases. Guárdalos en el mismo directorio, compila y ejecuta.
EliminarSaludos.
Lo más fácil es hacer esto:
ResponderEliminarpublic static void main(String[] args) throws IOException {
int Num, res;
int maxDivisor=1073741824; //Máximo factor divisorio entero
int maxEntero=2147483647; //Máximo numero entero que se puede ingresar
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Num = Integer.parseInt(in.readLine());
System.out.print("El equivalente binario de "+Num+" es: ");
while (maxDivisor>0)
{
res = Num / maxDivisor;
System.out.print(res);
Num = Num % maxDivisor;
maxDivisor = maxDivisor / 2;
}
System.out.println("\n-Fin del Programa-");
}
Lo más fácil es hacer esto:
ResponderEliminarpublic static void main(String[] args) throws IOException {
int Num, res;
int maxDivisor=1073741824; //Máximo factor divisorio entero
int maxEntero=2147483647; //Máximo numero entero que se puede ingresar
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Ingrese un numero: ");
Num = Integer.parseInt(in.readLine());
System.out.print("El equivalente binario de "+Num+" es: ");
while (maxDivisor>0)
{
res = Num / maxDivisor;
System.out.print(res);
Num = Num % maxDivisor;
maxDivisor = maxDivisor / 2;
}
System.out.println("\n-Fin del Programa-");
}
Me podrias explicar cada uno de los ciclos
ResponderEliminarSolo acepta enteros, da error con decimales aparte de como declaras los atributos
ResponderEliminargracias pero no me sirvió de gran ayuda
ResponderEliminar