C/Visual C - Consulta conversor de bases:

 
Vista:
sin imagen de perfil

Consulta conversor de bases:

Publicado por Ramiro (3 intervenciones) el 17/10/2014 03:39:55
buenas gente:
estoy trabajando en un conversor de bases para un trabajo de la facu, y ya tengo todo bien solo me falta el bendito case de pasar de hexadecimal a decimal.

teniendo en cuenta que para pasar a decimal tengo que multiplicar el valor del numero (hexa) por la base del sistema (16) elevado a la posicion menos uno.

quisiera que de ser posible me digan en uqe estoy fallando:

el trato que le doy al arreglo es: lo defino como caracter y lo leo como cadena.
(les paso solo la parte del programa que me da complicaciones: si quieren puedo pasar el programa entero.

aclaro tambien que los prints que estan entre los case, son unicamente para ver el valor que me devolvian, despues los saco.

salduos




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


void dec_a_hex(int nro, char hex[]);
int bin_a_car(int car[]);
void car_a_bin(char caracter, int binario[]);
int dec_a_hex(char hex[]);

main()
{
int i, largo, sum=0;
char hex[10];

printf("Ingrese el N%cmero Hexadecimal que desea transformar a decimal: ", 163);
scanf("%s",hex);







largo=strlen(hex);

for(i=0; i<=largo; ++i)
{
if(hex[i]>='0' && hex[i]<='9')sum+= hex[i]*pow(16,largo-1);
else
{
if(hex[i]>='a' && hex[i]<='f')
{
switch(hex[i])
{
case 'a':
sum+=10*pow(16,largo-1);
printf("\nsum %d\: ", sum);
break;
case 'b':
sum+=11*pow(16,largo-1);
printf("\nsum %d\n ", sum);
printf("\nhex %c\n ", hex[i]);
break;
case 'c':
sum+=12*pow(16,largo-1);
printf("\nsum %d\n: ", sum);
break;
case 'd':
sum+=13*pow(16,largo-1);
printf("\nsum %d\n: ", sum);
break;
case 'e':
sum+=14*pow(16,largo-1);
printf("\nsum %d\n: ", sum);
break;
case 'f':
sum+=15*pow(16,largo-1);
printf("\nsum %d\n: ", sum);
break;

}
}

}

}
printf("El N%cmero %s en el sistema Hexadecimal es equivalente al numero: %d en el sistema Decimal",163, hex, sum);
printf("\n");

system("pause");
}


Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Consulta conversor de bases:

Publicado por Tom (619 intervenciones) el 17/10/2014 13:42:34
Pues estás calculando bastante mal el acumulado, ya que largo no cambia.

prueba

case 'f':
sum = (sum * 16) + 15; // 16 es la base. 15 es el valor decimal del digito
printf("\nsum %d\n: ", sum);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta conversor de bases:

Publicado por Ramiro (3 intervenciones) el 17/10/2014 15:14:02
gracias por responder, pero no entiendo, ya que el largo depene del largo de la cadena que se ingresa por teclado, por ejemplo si el hexadecimal es b12f yo tendria que hacer (11*16^3+1*16^2+2*16^1+15*16^0), osea, el exponente al que se eleva la base depende de el largo de la cadena.
no se si me explico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta conversor de bases:

Publicado por Ramiro (3 intervenciones) el 17/10/2014 15:59:01
yo ya se donde esta el problema, pero no se como resolverlo, cuando la variable hex entra a iterar dentro del for, no me entra nunca por el lado de los numeros por que la variable hex es char y en las posiciones en las que hay numeros en realidad debe haber simbolos que tienen otros valores.
me parece que es eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar