programa en C q me convierta de binario a decimal y viceversa

Gianina
28 de Abril del 2008
Hola es una tarea q tengo q entregar el Lunes 20 de junio y la necesito de urgencia, pero el programa debe ser lo mas simple posible ,ayudemen

Getta
28 de Abril del 2008
hola gianina, bueno lo que quieres hacer es muy cencillo, tienes que tomar un numero y dividirlo sucesivamente por dos y los restos de los sucesivos resultados te daran los simbolos del sistema binario, por ejemplo el numero 18 si lo dividimos por dos nos da 9 y resto 0 (9.0), entonces el primer digito de izquierda a derecha es 0 (cero), luego tomamos su parte entera al resultado en este caso 9 lo dividimos por 2 y nos da 4 con resto de 5 (4.5) entonces el segundo digito sera 1 (uno), tomamos nuevamente la parte entera del resultado 4 lo dividimos por dos, nos da 2 con resto 0 (2.0), el tercer digito seria un 0 (cero), tomamos el 2 y lo dividimos por 2 nos da 1 con resto 0 (1.0), el cuarto digito seria 0 (cero), y por ultimo dividimos el 1 por 2 que nos da 0 con resto 5 (0.5), en este caso el quinto digito seria un 1 (uno), y ya no nos queda nada por dividir puesto que el resultado es menor a uno, si tomamos los digitos que tenemos nos queda el numero 18 en binario 10010 (recurda que los digitos se van formando de izquierda a derecha), este numero facilmente se comprueba con la siguiente formula (0*1 + 1*2 + 0*4 + 0*8 + 1*16)=(0+2+0+0+16)=18, bueno ahora lo debes pasar a codigo, creo que es muy sencillo, dividir el numero hasta que el resto sea menor a 1, trabajar con la parte entera del resultado para la siguiente division y luego ir concatenando de izquierda a derecha los ceros y unos dependiendo del resto de cada division. nada mas espero que te sirva de algo mucha suerte!!!!!!

davegahan23
28 de Abril del 2008
hola me podrian facilitar ese programilla q tambien tengo una tarea pero pal 24 por fa .

gracias chauu

Getta
28 de Abril del 2008
Hola chicos: me falto explicar como es la conversión de binario a decimal, si prestan atención a la explicación de mas arriba, se darán cuenta de que es más cencillo todavia, solo basta con tomar los dígitos de izquierda a derecha e ir multiplicandolo por su peso, al igual que lo hacemos con los decimales, la serie seria 2 a la 0, 2 a la 1, 2 a la 2, 2 a la tres .... asi sucesivamente.

Esto lo multiplicamos por el digito correspondiente, por ejemplo si tomamos el mismo numero el 18 seria algo así:

numero binario: 10010

tomamos el primer digito (0) y lo multiplicamos por 2 a la 0, esto nos da 0.
tomamos el segundo digito (1) y lo multiplicamos por 2 a la 1, esto nos da 2.
a simple vista adelantamos el resultado de los digitos 3 y cuatro que van a ser cero.
y por ultimo el quinto digito (1) lo multiplicamos por 2 a la 4, esto nos da 16.
Si sumamos todos los resultados nos queda al fin el numero 18, (0 + 2 + 0 + 0 + 16)=18

Si necesitan la función que haga esto me avisan.
Mucha suerte!!!!

fantasma
28 de Abril del 2008
//---------------------------------------------------------------------------

#include<iostream.h>
#include<math.h>

int binario[100];
const int base=2;
int conv(char binario[100])
{
int sumatoria=0;
for(int i=strlen(binario)-1;i>=0;i--)
{
sumatoria+=pow(base,i) * (int(*binario)-48);

binario++;

}
return(sumatoria);
}
void conv(int decimal,char* resultado)
{
int i,j;int binario[100],primero;//char *resultado=new(char);
if(decimal>=0)primero=0;else {primero=1;decimal=-decimal;}
for(i=0;decimal>=1;i++)
{
binario[i]=decimal%base;
decimal=decimal/base;

}
binario[i]=primero;
for(int j=i;j>=0;j--)
{
*resultado=binario[j]+48;
resultado++;
}
}
int main()
{
int entero; char binario[100]="";
cout<<"Entero: ";
cin>>entero;
conv(entero,binario);
cout<<binario<<endl;
cout<<"Binario: ";
cin>>binario;
cout<<"Binario: "<<conv(binario)<<endl;
system("pause");
return 0;
}
//---------------------------------------------------------------------------

NANCY
28 de Abril del 2008

Hola amigo disculpa estaba viendo tu programa y me sirvio mucho gracias pero no entendi porque en la parte:
sumatoria+=pow(base,i) * (int(*binario)-48);
le pusiste un numero 48