Ayuda fraccionario-binario

Iniciado por alexis33de, 31 Mayo 2011, 05:17 AM

0 Miembros y 2 Visitantes están viendo este tema.

alexis33de

Hola veran estaba tratando de transformar los numeros fraccionarios como: "0.125" a la base binaria, he implementado un algoritmo que saca la parte fracionaria pero no logro hacer que transforme , si alguien me podria decir que es lo que estoy haciendo mal se lo agradeceria, saludos
Código (cpp) [Seleccionar]
#include <iostream.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int i;
double num=23.875;
int intpart=(int)num;
double decpart= num-intpart;
double resultado;
char multi[10];
char m[10];
int cambio;
int fracion[10];
cout<<intpart<<" "<<decpart<<endl;
  for(i=0;i<sizeof(decpart);i++)
  {
   intpart=decpart*2;
   itoa(intpart,m,10);
   
   if(intpart<=1)
   cout<<0;
   else
   cout<<1;
  }

       
system("pause");
return 0;
}

alexis33de


Akai

Tu problema está en que realizas mal el algoritmo.No se trata de ir multiplicando, sino que has de ir dividiendo. Por otro lado, te aconsejaría que guardases el resultado en una cadena de carácteres, en vez de en nñúmeros

Se trata de lo siguiente:

numero=x.825

frac=0.825
frac  >= 1/2 (0.5)? si 1 frac=frac-1/2

frac=0.325
frac >= 1/4 (0.25)? si: 1 frac=frac-1/4

frac=0.125
frac >= 1/8 (0.125)? si: 1 frac=frac-1/8.

frac=0
frac >= 1/16(0.0625)? no: 0
...


PD: No es de buena educación en un foro postear 10 horas después de tu propio post porque nadie haya dicho nada todavía

alexis33de

Lo que paso es que como ayer puse esa duda , a bien entrada la noche y en la mñn vi que no habia comentarios entonces puse ese para q vuelva a subir en la lista de temas para ver si alguien me podia ayudar.
Hize lo que me dijiste pero funciona masomenos ya que tengo   un problema en el limite del for que convierte fraccionarios. Puse el codigo y un comentario donde esta el problema
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib>
#include <math.h>

int main()
{
int numero;
int residuo;
int n;
int  n2=0;
int  m=1;
int i;
double num=0;
cout<<"Escribe el numero: ";
cin>>(num);
int intpart=(int)num;
double decpart= num-intpart;
double resultado;
char multi[10];
int cambio;
int j;
char fracion[10];
while(intpart>0)
{
    n=intpart%2;
    intpart/=2;
    n2+=(n*m);
    m*=10;

}
cout<<"decimal: "<<n2<<".";
// PROBLEMA AQUI XD:
for(i=1;i<5;i++)
  {

   if(decpart>=(1/pow(2,i)))
    {
    cout<<"1";
   
    }
   else{
   cout<<"0";
   
   }

   decpart=decpart-(1/pow(2,i));

  }
system("PAUSE");
return 0;
}

Akai

Realizas mal el algoritmo, se resta SI y SOLO SI tienes el 1, sino, no se resta. Lo que siempre se hace es modificar la potencia.

Cita de: alexis33de en  1 Junio 2011, 03:15 AM
Lo que paso es que como ayer puse esa duda , a bien entrada la noche y en la mñn vi que no habia comentarios entonces puse ese para q vuelva a subir en la lista de temas para ver si alguien me podia ayudar.

Como dije, eso es mala educación.