Este programa en C++ recibe un entero decimal y lo convierte a binario. Es interesante analizar este problema mediante el mapeo de Bernoulli, el cual hace posible realizar esta conversión de otra manera. En tanto preparo ese programa, aquí va esta versión.
El algoritmo consta de los siguientes pasos:
1) Expresar el número x como una combinación lineal de potencias de dos
x = a0*2^0 + a1*2^1 + a2*2^2 + a3*2^3 + .....
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 = a0*2^0 + a1*2^1 + a2*2^2 + a3*2^3 + ....
como el numero x es impar, entonces a0 = 1
restando 1 en ambos lados de la ecuación se tiene
4 = a1*2^1 + a2*2^2 + a3*2^3 + ....
después se divide entre 2 ambos lados
2 = a1*2^0 + a2*2^1 + a3*2^2 + ....
en este caso x es par, por lo cual a1 = 0
se divide todo entre 2 y queda
1 = a2*2^0 + a3*2^1 +.....
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 un número. Este algoritmo es bastante sencillo, sin embargo imprimir el equivalente binario en forma correcta es bastante más complicado. El problema es que cuando escribimos lo hacemosde izquierda a derecha, pero los números en un sistema posicional deben escribirse de derecha a izquierda, esto crea un problema con la impresión en pantalla. He decidido no complicar el programa e imprimir el número en orden inverso con una advertencia al usuario.
#include <iostream> using namespace::std; // Prototipo de funcion void Binario(int x); /////////////////////////////// // FUNCION MAIN /////////////////////////////// int main() { // Abre main int numero; cout <<"\nIntroduzca un numero entero"; cout <<" y se imprimira su equivalente en binario. " <<endl; cin >> numero; // Se llama a la funcion Binario Binario(numero); return 0; } // Cierra main ///////////////////////////// // FUNCION BINARIO ///////////////////////////// void Binario( int x ) { // Abre funcion Binario cout << "\nEste numero en binario se ha imprimido invertido"; cout << "\nLEASE AL REVES!" <<endl; while ( 0 != x ) { // Abre while if ( 0 != x % 2 ) { // Abre if cout << "1"; x -= 1; x /= 2; } // Cierra if else // Si el numero es par { // Abre else cout <<"0"; x /= 2; } // Cierra else } // Cierra while cout <<endl <<endl; } // Cierra funcion Binario
No hay comentarios:
Publicar un comentario