Binario a decimal y vice

nestor1991ag
28 de Abril del 2010
Hola he creado un programa para pasar de binario a decimal y de decimal a bianrio, pero ahi un error y no puedo solucionarlo:


[highlight=c]
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

void convert(char n);

void main()
{
char n[20];
int numero, i, decimal, elevado, binario;
char opcion;
int cociente, resto;

printf ("Dame un numero entero positivon");
gets(n);

printf ("Es binario(B) o decimal(D)n");
scanf("%c", &opcion);

elevado=0;

if (opcion=='B')
{
for (i=19; i>=0; i++)
{
if (n[i]=='1')
{
decimal=decimal+ pow(2,elevado);
}
elevado++;
}

for (i=0; i<=19; i++)
{
n[i]='';
}

n[0]=decimal;
}

if (opcion=='D')
{
numero=atoi(n);

while (numero<2)
{
for (i=1; i<=numero)
{
cociente=numero/2;
numero=cociente;
printf ("%d ", resto);
}
}
}

puts (n);

getch();
}
[/highlight]

Enunciado: Ejercicio 22: Diseña un programa que lea de teclado un número entero positivo y pregunte al usuario la base en la que está dicho número. El usuario tecleará B para indicar que está en binario y D para indicar que está en decimal. Si el número introducido estuviese en binario se convertirá a decimal y el resultado se escribirá en pantalla, en caso contrario se convertirá a binario y el resultado se escribirá en pantalla. Se recomienda leer el número como una cadena de caracteres.

Gracias por vuestro tiempo

nestor1991ag
28 de Abril del 2010
Código completo, con muchos errores:
[highlight=c]
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

void decimalb (char n);
void decimalo (char n);
void decimalh (char n);
void convertirb (char n);

void main()
{
char a[100];
char i, base, convertir, fuera=0;

for (i=0; i<=100; i++)
{
scanf ("%d", &a[i]);

if (a[i]!='*')
{
fuera=0;
}

if (a[i]=='*')
{
fuera++;
}
}

printf ("En que base esta?n");
scanf ("%d", &base);

printf ("A que base la quieres convertir? (binario, octal, decimal o hexadecimaln");
scanf("%d", &convertir);

if (base=='B')
{
decimalb(a);
}

if (base=='O')
{
decimalo(a);
}

if (base=='H')
{
decimalh(a);
}

if (convertir=='B')
{
convertirb(a);
}

getch();
}

void decimalb (char n)
{
int j=0, contador=0, i, decimalb=0;

for (i=99; i>=0; i--)
{
if (n[i]==1)
{
decimalb=decimalb+(n[i]+(2*contador);
contador++;
}

if (n[i]==0)
{
decimalb=decimalb+n[i]+(2*contador);
contador++;
}
}

for (i=0; i<=99; i++)
{
n[i]='';
}

n[0]=decimalb;
}

void decimalo (char n)
{
int j=0, contador=0, i, decimalo=0;

for (i=99; i>=0; i--)
{
if (n[i]==1)
{
decimalo=decimalo+(n[i]+(8*contador);
contador++;
}

if (n[i]==0)
{
decimalo=decimalo+n[i]+(8*contador);
contador++;
}
}

for (i=0; i<=99; i++)
{
n[i]='';
}

n[0]=decimalo;
}

void decimalh (char n)
{
int j=0, contador=0, i, decimalh=0;

for (i=99; i>=0; i--)
{
if (n[i]==1)
{
decimalh=decimalh+(n[i]+(16*contador);
contador++;
}

if (n[i]==0)
{
decimalh=decimalh+n[i]+(16*contador);
contador++;
}
}

for (i=0; i<=99; i++)
{
n[i]='';
}

n[0]=decimalh;
}

void convertir (char n)
{
int i=0, binario=0;

atoi (n);


for (i=0; n[i]==1;)
{
binario=binario+(n[i]%2);
n[i]=binario
}
}

void convertir (char n)
{
int i=0, binario=0;

atoi (n);


for (i=0; n[i]==1;)
{
binario=binario+(n[i]%8);
n[i]=binario;
}
}

void convertir (char n)
{
int i=0, binario=0;

for (i=0; n[i]==1;)
{
binario=binario+(n[i]%16);
n[i]=binario;
}
}
[/highlight]

Porfavor, si alguien pudiera compilarlo y me ayudara con los errores, son la gran mayoria los mismo de 19 errores que hay en total, 31 son de lo mismo, pero no puedo hayar el como resolverlo.

Gracias por su tiempo.

vite666
28 de Abril del 2010
Pues mira aqui esta tu programa sin errores, lo que pasa es q querias pasar un parametro de char* a una funcion que recibe solo un char, los demas errores son de sintaxis, el como funciona tu programa pues la verdad no me esta muy claro, pues no lo hice funcionar, aqui esta haber si es lo que querias.

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

void decimalb (char* n);
void decimalo (char* n);
void decimalh (char* n);
void convertirb (char* n);
void convertiro (char* n);
void convertirh (char* n);
void main()
{
char a[100];
char i, base, convertir, fuera=0;

for (i=0; i<=100; i++)
{
scanf ("%d", &a[i]);
if (a[i]!='*')
{
fuera=0;
}
if (a[i]=='*')
{
fuera++;
}
}

printf ("En que base esta?n");
scanf ("%d", &base);

printf ("A que base la quieres convertir? (binario, octal, decimal o hexadecimaln");
scanf("%d", &convertir);

if (base=='B')
{
decimalb(a);
}

if (base=='O')
{
decimalo(a);
}

if (base=='H')
{
decimalh(a);
}

if (convertir=='B')
{
convertirb(a);
}

getch();
}

void decimalb (char* n)
{
int j=0, contador=0, i, decimalb=0;

for (i=99; i>=0; i--)
{
if (n[i]==1)
{
decimalb=decimalb+(n[i]+(2*contador));
contador++;
}

if (n[i]==0)
{
decimalb=decimalb+n[i]+(2*contador);
contador++;
}
}

for (i=0; i<=99; i++)
{
n[i]='';
}

n[0]=decimalb;
}

void decimalo (char* n)
{
int j=0, contador=0, i, decimalo=0;

for (i=99; i>=0; i--)
{
if (n[i]==1)
{
decimalo=decimalo+(n[i]+(8*contador));
contador++;
}

if (n[i]==0)
{
decimalo=decimalo+n[i]+(8*contador);
contador++;
}
}

for (i=0; i<=99; i++)
{
n[i]='';
}

n[0]=decimalo;
}

void decimalh (char* n)
{
int j=0, contador=0, i, decimalh=0;

for (i=99; i>=0; i--)
{
if (n[i]==1)
{
decimalh=decimalh+(n[i]+(16*contador));
contador++;
}

if (n[i]==0)
{
decimalh=decimalh+n[i]+(16*contador);
contador++;
}
}

for (i=0; i<=99; i++)
{
n[i]='';
}

n[0]=decimalh;
}

void convertirb (char* n)
{
int i=0, binario=0;

atoi (n);


for (i=0; n[i]==1;)
{
binario=binario+(n[i]%2);
n[i]=binario;
}
}

void convertiro (char* n)
{
int i=0, binario=0;

atoi (n);


for (i=0; n[i]==1;)
{
binario=binario+(n[i]%8);
n[i]=binario;
}
}

void convertirh (char* n)
{
int i=0, binario=0;

for (i=0; n[i]==1;)
{
binario=binario+(n[i]%16);
n[i]=binario;
}
}

avatardefuego
28 de Abril del 2010
disculpen, pero no tengo mucho tiempo(el trabajo)
alguna vez tube que hacer algo similar.
el caso es que tenia que pasar un texto(para el ejemplo..usuario y password)
asi que para resumirlo, pase cada uno de los caracteres a ascii y de alli lo pase a binario..
y viceversa..para poder leerlo aca el codigo..esta algo largo..pero espero ayude

#include <stdio.h>

static char mypath[] = "user.log";

void SaveUser( char *user, char *pass );
void GetUser( char *charuser, char *charpass );
void CharToBinary( char *Msg, char *ans, int lenMsg );
void BinaryToChar( char *Str, char *Ans );

/*
void SaveUser( char *user, char *pass )
after login, this function, save user and password in user.log, in binary code
*user(IN) - the user in login
*pass(IN) - the password in login
*/
void SaveUser( char *user, char *pass )
{
char myuser[255], mypass[255];
int mylen;

mylen= strlen( user );
CharToBinary( user, myuser, mylen );

mylen= strlen( pass );
CharToBinary( pass, mypass, mylen );


FILE *f = fopen( mypath, "w" );
fprintf( f, "%st%sn", myuser, mypass );
fclose( f );
}

/*
void GetUser( char *charuser, char *charpass )
start login, this function, get user and password from user.log
*charuser(OUT) - the user for login
*charpass(OUT) - the password for login
*/
void GetUser( char *charuser, char *charpass )
{
char binuser[500], binpass[500];

FILE *f = fopen( mypath, "r" );

if ( f == NULL )
{
sprintf( charuser, "" );
sprintf( charpass, "" );

return;
}
fscanf( f, "%st%s", binpass, binuser );
fclose( f );


BinaryToChar( binuser, charuser );
BinaryToChar( binpass, charpass );
}

/*
void CharToBinary( char *Msg, char *ans, int lenMsg )
to save the user and password, this parameters are encript, in binary code.
this function traslate the char values to binary.
*Msg(IN) - the parameter user/password in char - in
*ans(OUT) - is the return value in binary code - out
lenMsg(IN) - len of *Msg - in
*/
void CharToBinary( char *Msg, char *ans, int lenMsg )
{
int intascii;
char charascii[3];

int residuum, result;

for ( int i=0; i<lenMsg; i++ )
{
intascii = Msg[i];

for ( int j=0; j<8; j++ )
{
result = intascii / 2;
residuum = intascii % 2;
intascii = result;

ans[((i+1)*7)+i-j] = '0';
if ( residuum == 1 ) ans[((i+1)*7)+i-j] = '1';
}
ans[(i+1)*8] = 0; //binary end
}
}

/*
void BinaryToChar( char *Str, char *Ans )
to get the parameters in start login(user and password)
we need traslate the values from binary to char
*Str(IN) - the user/password in binary
*Ans(OUT) - the user/password in char
*/
void BinaryToChar( char *Str, char *Ans )
{
int LenStr = ( strlen( Str )/8 );
int n;

for ( int i=0; i<LenStr; i++ )
{
n = 0;
for ( int j=0; j<8; j++ )
{
n = n >> 1;
if ( Str[((i+1)*7)+i-j] == '1' )
n |= 128;
}
Ans[i] = n;
}
Ans[LenStr] = 0;
}