¿Existe algún programa para transformar números de decimal a hexadecimal y al reves?

Necesito saber si alguien tiene o sabe como hacer un programa que transforme números de decimal a hexadecimal y de hexadecimal a decimal. Sin usar pilas, colas, ni vectores...

1 respuesta

Respuesta
1
Vamos por partes. Primero la fácil: de hexa a decimal.
Como ya sabrás, si el número X[n] X[n-1]... X[2] X[1] X[0] es un número hexadecimal (donde X es uno de los dígitos hexadecimales), su valor en base 10 es
X[n]*(16^n) + X[n-1)*(16^(n-1)) + ... + X[2]*(16^2) + X[1]*(16^1) + X[0]*(16^0).
Si vamos sacando factor común del la base sucesivamente, nos encontraremos con que el valor es
((...((X[n])*16 +X[n-1]) * 16 + ... + X[2]) * 16 + X[1]) * 16 + X[0].
Así, es más fácil: supongamos que lees el número hexadecimal en un string ES, y que tienes una función hex2dec que transforma un carácter hexadecimal ('0', '1', ..., '9', 'A', ... 'F') a su valor decimal (0, .. 15). El algoritmo es el siguiente:
valor := 0;
for (i := 1 to length(s) do
valor := valor * 16 + hex2dec(s);
y en la variable valor tenemos el valor decimal del número.
Para la otra parte necesitas un algoritmo recursivo. Si tienes un número entero de decimal, como sabrás, deberás ir obteniendo los restos de dividir por 16 e imprimirlos al revés: el primer resto debe aparecer en último lugar. Así que, si tenemos una función dec2hex, que transforma un número entre 0 y 15 en un dígito hexadecimal (carácter), el procedimiento queda
function funcion2(d:integer) : string;
var resto : integer;
begin
if (d = 0)
then funcion2 = '0';
else funcion2 := funcion2(d div 16) + dec2hex(d mod 16);
end;
Tiene una pequeña pega: si el número inicial es el 0, el resultado será '0'. Pero si no, siempre tendrá un cero por delante. Eso se puede resolver más o menos fácilmente, pero te lo dejo a ti.
Y ya sabes: si tienes alguna duda, avísame. Ya sabes que estaré aquí.
SkullGirl

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas