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:
Posts (Atom)