viernes, 7 de enero de 2011

Sedgewick2.5 (Convertir de Decimal a Binario en C++)

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

Related Posts Plugin for WordPress, Blogger...