Thursday, January 28, 2010

2.2 - Decimal a Binario Forma 2

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;
}

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;
}

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;
}

Tuesday, January 26, 2010

Welcome :)

Mi buen blog...