Está en la página 1de 4

EXPLICACION TEORICA

-La variable frase, es el número en base n fraccionario que vamos a insertar. Es un String el
cual vamos a tomar elemento por elemento y vamos a analizar tanto la parte decimal como
la fracción. Y lo vamos a dividir en dos vectores posición [0] para parte entera y posición [1]
para parte decimal.

Ejemplo:
Convertir “ABC.2AB” de base 16 a base 32

Parte entera:
-Las variables baseF y baseC (nombres arbitrarios) son enteros. Por un lado, baseF es muy
importante ya que nos indica de que base es actualmente el número que hemos insertado,
esto además nos ayuda para pasar la parte entera a decimal de la siguiente manera:

tenemos baseF = 16;

ABC = [A, B, C] = [C,B,A] = [12,11,10] = [ (12*16^0) + (11*16^1) + (10*16^2) ] = 2748

Hay un gran interés por obtener números decimales ya que son nuestra base intermedia o
universal. Por lo tanto, alojaremos cada número de la parte entera (convertido a decimal) en
una variable llamada num que es de tipo long.
num=2748;

La función Takephrase toma de la frase la parte entera, separa las letras o números y los
multiplica por baseF , luego los eleva al índex del vector como en el ejemplo mostrado para
obtener un numero de tipo long.

Por otro lado, la variable baseC es la base a la que queremos convertir y es igualmente
importante porque es el parámetro que luego le pasamos a nuestra función para obtener los
residuos entonces en este caso :

BaseC = 32;

Con el long obtenido (num=2748) vamos a convertirlo a la base 32 de la siguiente manera:

vamos a recolectar todos los residuos o nódulos que nos de al dividirlo por 32 para eso
haremos ciclos

ciclo 1

modulo = 2748%32 = 28

nuevonumero = 2748/32 = 85

ciclo 2

modulo = 85%32 = 21

nuevonumero = 85/32 = 2

como ya el nuevonumero es 2 y es menor a 32 lo cogemos como residuo

resultado en base 32:

[28,21,2] = [2,21,28] = [2,L,S] = 2LS


Parte entera = 2LS

Parte Decimal:
Ahora analizamos la posición [1] del string (”.2AB”) y vamos a tomar de nuevo elemento
por elemento. De acuerdo a la teoría de números, no hay necesidad de invertir el array :

[2,A,B] = [2,10,11]
Ahora como se había planteado, necesitamos obtener un numero decimal, por lo tanto
vamos a tomar cada elemento del array y lo vamos a dividir por baseF = 16 elevado al index
+1 ya que según la teoría de sistemas numéricos debemos iniciar con la potencia 1 , luego
vamos a sumar todo

[ (2/16^1) + (10/16^2) + (11/16^3) ] = 0.166748047

Este numero lo vamos a alojar en en una variable de tipo doublé llamada nn

nn=0.166748047;

Obtuvimos un numero decimal el cual, como habíamos dicho nos sirve de base intermedia o
universal. Ahora este número (0.166748047) lo convertiremos a base 32 con el siguiente
algoritmo:

Haremos un do while que tome las partes enteras y tome las partes decimales con el fin de
autimatizar el resultado y guardar todas las partes enteras en un array. El ciclo se hará de tal
manera que cuando la parte decimal sea 0.0 se termine el proceso. Multiplicaremos cada
decimal por baseC =32;

Tenemos que nn= 0.166748047;

Primera iteración:

Do{

R=nn*32;

R= 5.335937504;

ParteEntera= 5;

Arr.add(ParteEntera);

ParteDecimal =0.335937504;

nn= ParteDecimal;

}while(ParteDecimal>0.0);

Segunda iteración:

nn= 0.335937504;

Do{

R=nn*32;

R= 10.75000013;

ParteEntera= 10;

Arr.add(ParteEntera);

ParteDecimal =0.75000013;

nn= ParteDecimal;
}while(ParteDecimal>0.0);

Tercera iteración:

nn= 0. 75000013;

Do{

R=nn*32;

R= 24.00000416;

ParteEntera= 24;

Arr.add(ParteEntera);

ParteDecimal =0.00000416;

nn= ParteDecimal;

}while(ParteDecimal>0.0);

Resultados del array guardando las partes enteras de cada iteracion:

Array = [5,10,24] = [5,A,O] = 5AO

Parte decimal = 5A0

RESULTADO = PARTE ENTERA+ PARTE DECIMAL;

= 2LS.5AO

También podría gustarte