Aqui otra forma un poco mas sencilla de resolver el problema de convertir decimal a binario, radica en tener el decimal y dividirlo entre 2, si resulta non el bit es activo, se vuelve a dividir entre 2 (sin fracción) y si resulta par el bit es inactivo, asi hasta obtener 0.
Como lo vamos almacenando de izquierda a derecha, solo invertimos el orden.
Nota: Si lo realizan en alguna libreta, pongan los bits de derecha a izquierda.
---------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <algorithm>
//Nota: El std:: significa que usamos algun elemento de la biblioteca estandar
std::string convierte(unsigned long n){
    std::string binario;                    //Declaramos una cadena
    
    for(unsigned long i=n;i!=0;i/=2){        //Repetimos la operacion n bits (la calculamos dividiendo hasta que de 0)
        binario.push_back('0' + (i % 2));     //Dividimos entre 2 si es non el bit es activo
    }
    
    std::reverse(binario.begin(),binario.end()); //Como push_back lo inserta adelante de la cadena, lo invertimos
    
    if(binario.empty()){
        binario.push_back('0');                //Si nos dieron 0 les davolemos 0
    }
    
    return binario;
}
int main(){
    unsigned long n;
    while(std::cin>>n){                        //Ciclo pidiendo el valor decimal
        std::cout<<convierte(n)<<"\n\n";    //Imprimimos
    }
    
    return 0;
}
Thursday, January 28, 2010
2.1 - Decimal a Binario Forma 1
El siguiente problema es un ejemplo de como resolver el problema de conversión de decimal a binario de la forma que la maestra nos explico en clase. Incluye algunos comentarios.
-------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
unsigned long temp = 0;
void convierte(unsigned long decimal,int cont){
bool bit;
    
if(cont == -1){ //Calcula la potencia
if(decimal == 0){ std::cout << 0; return; }
while(temp<=decimal){
temp = pow(2,cont);
cont++;
}
cont -= 2;
}
    
temp = pow(2,cont); //Temporal a restar
    
if(temp<=decimal){ //Decide si es bit activo o no
bit = 1;
decimal -= temp; //Resta del decimal
}else{
bit = 0;
}
    
std::cout << bit; //Imprimimos el bit
    
if(cont > 0){ //Recursion para seguir calculando
cont--;
convierte(decimal,cont);
}
    
}
int main(){
unsigned long dec;
    
for(;;){ //Ciclo infinito
std::cout << "\nNumero a convertir: ";
std::cin >> dec; //Leemos el decimal
convierte(dec,-1);
}
    
std::cout<<"\n";
    
return 0;
}
-------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <math.h>
unsigned long temp = 0;
void convierte(unsigned long decimal,int cont){
bool bit;
if(cont == -1){ //Calcula la potencia
if(decimal == 0){ std::cout << 0; return; }
while(temp<=decimal){
temp = pow(2,cont);
cont++;
}
cont -= 2;
}
temp = pow(2,cont); //Temporal a restar
if(temp<=decimal){ //Decide si es bit activo o no
bit = 1;
decimal -= temp; //Resta del decimal
}else{
bit = 0;
}
std::cout << bit; //Imprimimos el bit
if(cont > 0){ //Recursion para seguir calculando
cont--;
convierte(decimal,cont);
}
}
int main(){
unsigned long dec;
for(;;){ //Ciclo infinito
std::cout << "\nNumero a convertir: ";
std::cin >> dec; //Leemos el decimal
convierte(dec,-1);
}
std::cout<<"\n";
return 0;
}
Wednesday, January 27, 2010
1.1 - Generación De Serie
Este es un pequeño algoritmo de generacion de la siguiente serie programada en c++:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34....
Cualquier comentario recibido!
------------------------------------------------------------------------------------------
#include <iostream>
void genera(int viejo, int nuevo){
if(viejo==0) std::cout << viejo << ", " << nuevo;
std::cout << ", " << viejo+nuevo;
    
if((viejo+(nuevo*2)) < 1000)
genera(nuevo,viejo+nuevo);
}
int main(){
genera(0,1);
std::cout << "\n";
    
return 0;
}
0, 1, 1, 2, 3, 5, 8, 13, 21, 34....
Cualquier comentario recibido!
------------------------------------------------------------------------------------------
#include <iostream>
void genera(int viejo, int nuevo){
if(viejo==0) std::cout << viejo << ", " << nuevo;
std::cout << ", " << viejo+nuevo;
if((viejo+(nuevo*2)) < 1000)
genera(nuevo,viejo+nuevo);
}
int main(){
genera(0,1);
std::cout << "\n";
return 0;
}
Tuesday, January 26, 2010
Subscribe to:
Comments (Atom)
