Este programa NO pone infinito o NaN.
PROGRAM ieeee (input,output);
(*Programa que pasa de un número en decimal a IEEE y vicerbeza*)
VAR
Opcion:char;
Opcion2:char;
PROCEDURE menu;
BEGIN
Writeln('[S] Salir del programa.');
Writeln('[D] De decimal a IEEE. ');
Writeln('[I] De IEEE a decimal. ');
END;
(*****************************************************************************)
PROCEDURE menud;
BEGIN
Writeln('[V] Volver al menú anterior.');
Writeln('[S] Simple precisión. ');
Writeln('[D] Doble precisión. ');
END;
(*****************************************************************************)
PROCEDURE menui;
BEGIN
Writeln('[V] Volver al menú anterior.');
Writeln('[S] Simple precisión. ');
Writeln('[D] Doble precisión. ');
END;
(*****************************************************************************)
PROCEDURE dectoieeesp;
TYPE
TCadena = string (50);
TAbinario = ARRAY [1..23] OF integer;
TAexponente = ARRAY [1..8] OF integer;
Tatotal = ARRAY [1..32] OF integer;
TAieee = PACKED ARRAY [1..8] OF char;
VAR
Numero:real;(**)
Entero:real VALUE (0); (**)
Decimal:real VALUE (0); (**)
Enteroi:integer; (**)
Binarioe:TAbinario; (**)
Exponente:integer; (**)
Exponenteb:TAexponente; (**)
Signo:integer VALUE (0); (**)
Total:TAtotal; (**)
Resultado:TAieee; (**)
Contador:integer; (**)
PROCEDURE pedir_numero;
BEGIN
Write('Escribe el número que quieres pasar: ');
Readln(Numero);
END;
(******************************************************************************)
PROCEDURE signos;
BEGIN
IF Numero<0 THEN
BEGIN
Signo:=1;
Numero:=-Numero;
END
ELSE
Signo:=0;
END;
(*****************************************************************************)
PROCEDURE partes;
BEGIN
Decimal:=FRAC(Numero);
Entero:=INT (Numero);
Enteroi:=ROUND(Entero);
END;
(******************************************************************************)
PROCEDURE binario;
TYPE
TAABinario = ARRAY [1..23] OF integer;
VAR
i:integer VALUE (1);
Binarios:TAABinario;
PROCEDURE b_entero;
VAR
i:integer VALUE (1);
j:integer VALUE (1);
BEGIN
i:=1;
WHILE i<=23 DO
BEGIN
Binarios[i] := Enteroi MOD (2);
Enteroi:= Enteroi DIV (2);
i:=i+1
END;
i:=23;
j:=1;
WHILE i>=1 DO
BEGIN
Binarioe[i]:=Binarios[j];
i:=i-1;
j:=j+1;
END;
END;
(******************************************************************************)
PROCEDURE binario_de;
VAR
i:integer;
Decimalada:real;
BEGIN
i:=23-contador;
Decimalada:=Decimal;
WHILE i<=23 DO
BEGIN
Decimalada:=Decimalada*2;
IF Decimalada >=1 THEN
BEGIN
Binarioe[i]:=1;
Decimalada:=Decimalada-1;
i:=i+1;
END
ELSE
BEGIN
Binarioe[i]:=0;
i:=i+1;
END;
END;
END;
(*****************************************************************************)
PROCEDURE buscar_cifras;
VAR
i:integer;
j:integer;
buscador:integer VALUE (0);
BEGIN
i:=1;
Contador:=0;
WHILE i<=23 DO
BEGIN
buscador:=Binarioe[i];
IF buscador = 1 THEN
i:=24
ELSE
contador:=contador+1;
i:=i+1;
END;
Exponente:=23-contador;
END;
(**************************************************************************)
PROCEDURE binario_man;
VAR
i:integer VALUE (1);
j:integer VALUE (1);
Buscador:integer;
Contadore:integer VALUE (0);
BEGIN
j:=1;
i:=1;
Contadore:=1;
WHILE i<=23 DO
BEGIN
Buscador:=Binarioe[i];
IF Buscador=1 THEN
BEGIN
Contadore:=Contadore+1;
i:=24;
END
ELSE
BEGIN
Contadore:=Contadore+1;
i:=i+1;
END;
END;
FOR i:=Contadore TO 23 DO
BEGIN
Binarioe[j]:=Binarioe[i];
j:=j+1;
END;
FOR i:=1 TO Contadore DO
BEGIN
Binarioe[j]:=0;
j:=j+1;
END;
END;
(*PROCEDIMIENTO binario, principal *)
BEGIN
b_entero;
buscar_cifras;
binario_man;
binario_de;
END;
(****************************************************************************)
PROCEDURE exponenciadas;
VAR
exponenci:integer;
PROCEDURE dos_ene;
BEGIN
exponenci:=(2 POW(7)-1)+Exponente-1;
END;
(******************************************************************************)
PROCEDURE exp_bin;
TYPE
TABinarioex = ARRAY [1..8] OF integer;
VAR
i:integer;
j:integer;
Binarioex:TABinarioex;
BEGIN
i:=1;
WHILE i<=8 DO
BEGIN
Binarioex[i]:=exponenci MOD (2);
exponenci:=exponenci DIV (2);
i:=i+1;
END;
i:=8;
j:=1;
WHILE i>=1 DO
BEGIN
Exponenteb[i]:=Binarioex[j];
i:=i-1;
j:=j+1;
END;
END;
(*****************************************************************************)
BEGIN
dos_ene;
exp_bin;
END;
(*****************************************************************************)
PROCEDURE resultadot;
VAR
i:integer;
BEGIN
Writeln;
Writeln('SIGNO EXPONENTE MANTISA');
Write(' ',Signo:0,' ');
FOR i:=1 TO 8 DO
Write(Exponenteb[i]:0);
Write(' ');
FOR i:=1 TO 23 DO
Write(Binarioe[i]:0);
writeln;
END;
(******************************************************************************)
PROCEDURE rieee;
VAR
i:integer VALUE (1);
PROCEDURE unir;
VAR
i:integer;
j:integer VALUE (1);
BEGIN
Total[1]:=Signo;
j:=1;
FOR i:=2 TO 9 DO
BEGIN
Total[i]:=Exponenteb[j];
j:=j+1;
END;
j:=1;
FOR i:=10 TO 32 DO
BEGIN
Total[i]:=binarioe[j];
j:=j+1;
END;
END;
(*************************************************************************************)
PROCEDURE gruposb;
VAR
i:integer;
j:integer;
k:integer;
tope:integer;
Contador:integer;
BEGIN
j:=1;
tope:=4;
FOR i:=1 TO 8 DO BEGIN
Contador:=90000;
WHILE j<=tope DO BEGIN
Contador:=Contador+Total[j]*10 POW(tope-j);
j:=j+1;
END;
CASE Contador OF
90000: Resultado[i]:='0';
90001: Resultado[i]:='1';
90010: Resultado[i]:='2';
90011: Resultado[i]:='3';
90100: Resultado[i]:='4';
90101: Resultado[i]:='5';
90110: Resultado[i]:='6';
90111: Resultado[i]:='7';
91000: Resultado[i]:='8';
91001: Resultado[i]:='9';
91010: Resultado[i]:='A';
91011: Resultado[i]:='B';
91100: Resultado[i]:='C';
91101: Resultado[i]:='D';
91110: Resultado[i]:='E';
91111: Resultado[i]:='F';
END;
tope:=tope+4;
END;
Writeln;
Writeln(Resultado);
END;
(****************************************************************************)
BEGIN
unir;
gruposb;
END;
(****************************************************************************)
BEGIN
pedir_numero;
signos;
partes;
binario;
exponenciadas;
resultadot;
rieee;
END;
(*****************************DECTOIEEEDP**********************************)
PROCEDURE dectoieeedp;
TYPE
TCadena = string (50);
TAbinario = ARRAY [1..52] OF integer;
TAexponente = ARRAY [1..11] OF integer;
Tatotal = ARRAY [1..64] OF integer;
TAieee = PACKED ARRAY [1..16] OF char;
VAR
Numero:real;(**)
Entero:real VALUE (0); (**)
Decimal:real VALUE (0); (**)
Enteroi:integer; (**)
Binarioe:TAbinario; (**)
Exponente:integer; (**)
Exponenteb:TAexponente; (**)
Signo:integer VALUE (0); (**)
Total:TAtotal; (**)
Resultado:TAieee; (**)
Contador:integer; (**)
PROCEDURE pedir_numero;
BEGIN
Write('Escribe el número que quieres pasar: ');
Readln(Numero);
END;
(******************************************************************************)
PROCEDURE signos;
BEGIN
IF Numero<0 THEN
BEGIN
Signo:=1;
Numero:=-Numero;
END
ELSE
Signo:=0;
END;
(*****************************************************************************)
PROCEDURE partes;
BEGIN
Decimal:=FRAC(Numero);
Entero:=INT (Numero);
Enteroi:=ROUND(Entero);
END;
(******************************************************************************)
PROCEDURE binario;
TYPE
TAABinario = ARRAY [1..52] OF integer;
VAR
i:integer VALUE (1);
Binarios:TAABinario;
PROCEDURE b_entero;
VAR
Resultado:integer;
i:integer VALUE (1);
j:integer VALUE (1);
BEGIN
i:=1;
WHILE i<=52 DO
BEGIN
Binarios[i] := Enteroi MOD (2);
Enteroi:= Enteroi DIV (2);
i:=i+1
END;
i:=52;
j:=1;
WHILE i>=1 DO
BEGIN
Binarioe[i]:=Binarios[j];
i:=i-1;
j:=j+1;
END;
END;
(******************************************************************************)
PROCEDURE binario_de;
VAR
i:integer;
Decimalada:real;
BEGIN
i:=52-contador;
Decimalada:=Decimal;
WHILE i<=52 DO
BEGIN
Decimalada:=Decimalada*2;
IF Decimalada >=1 THEN
BEGIN
Binarioe[i]:=1;
Decimalada:=Decimalada-1;
i:=i+1;
END
ELSE
BEGIN
Binarioe[i]:=0;
i:=i+1;
END;
END;
END;
(*****************************************************************************)
PROCEDURE buscar_cifras;
VAR
i:integer;
j:integer;
buscador:integer VALUE (0);
BEGIN
i:=1;
Contador:=0;
WHILE i<=52 DO
BEGIN
buscador:=Binarioe[i];
IF buscador = 1 THEN
i:=53
ELSE
contador:=contador+1;
i:=i+1;
END;
Exponente:=52-contador;
END;
(******************************************************************************)
PROCEDURE binario_man;
VAR
i:integer VALUE (1);
j:integer VALUE (1);
Buscador:integer;
Contadore:integer VALUE (0);
BEGIN
j:=1;
i:=1;
Contadore:=1;
WHILE i<=52 DO
BEGIN
Buscador:=Binarioe[i];
IF Buscador=1 THEN
BEGIN
Contadore:=Contadore+1;
i:=53;
END
ELSE
BEGIN
Contadore:=Contadore+1;
i:=i+1;
END;
END;
FOR i:=Contadore TO 52 DO
BEGIN
Binarioe[j]:=Binarioe[i];
j:=j+1;
END;
FOR i:=1 TO Contadore DO
BEGIN
Binarioe[j]:=0;
j:=j+1;
END;
END;
(******************************************************************************)
(*PROCEDIMIENTO binario, principal *)
BEGIN
b_entero;
buscar_cifras;
binario_man;
binario_de;
END;
(****************************************************************************)
PROCEDURE exponenciadas;
VAR
exponenci:integer;
PROCEDURE dos_ene;
BEGIN
exponenci:=(2 POW(10)-1)+Exponente-1;
END;
(******************************************************************************)
PROCEDURE exp_bin;
TYPE
TABinarioex = ARRAY [1..11] OF integer;
VAR
i:integer;
j:integer;
Binarioex:TABinarioex;
BEGIN
i:=1;
WHILE i<=11 DO
BEGIN
Binarioex[i]:=exponenci MOD (2);
exponenci:=exponenci DIV (2);
i:=i+1;
END;
i:=11;
j:=1;
WHILE i>=1 DO
BEGIN
Exponenteb[i]:=Binarioex[j];
i:=i-1;
j:=j+1;
END;
END;
(*****************************************************************************)
BEGIN
dos_ene;
exp_bin;
END;
(*****************************************************************************)
PROCEDURE resultadot;
VAR
i:integer;
BEGIN
Writeln;
Writeln('SIGNO EXPONENTE MANTISA');
Write(' ',Signo:0,' ');
FOR i:=1 TO 11 DO
Write(Exponenteb[i]:0);
Write(' ');
FOR i:=1 TO 52 DO
Write(Binarioe[i]:0);
writeln;
END;
(******************************************************************************)
PROCEDURE rieee;
VAR
i:integer VALUE (1);
PROCEDURE unir;
VAR
i:integer;
j:integer VALUE (1);
BEGIN
Total[1]:=Signo;
j:=1;
FOR i:=2 TO 12 DO
BEGIN
Total[i]:=Exponenteb[j];
j:=j+1;
END;
j:=1;
FOR i:=13 TO 64 DO
BEGIN
Total[i]:=binarioe[j];
j:=j+1;
END;
END;
(*************************************************************************************)
PROCEDURE gruposb;
VAR
i:integer;
j:integer;
k:integer;
tope:integer;
Contador:integer;
BEGIN
j:=1;
tope:=4;
FOR i:=1 TO 16 DO BEGIN
Contador:=90000;
WHILE j<=tope DO BEGIN
Contador:=Contador+Total[j]*10 POW(tope-j);
j:=j+1;
END;
CASE Contador OF
90000: Resultado[i]:='0';
90001: Resultado[i]:='1';
90010: Resultado[i]:='2';
90011: Resultado[i]:='3';
90100: Resultado[i]:='4';
90101: Resultado[i]:='5';
90110: Resultado[i]:='6';
90111: Resultado[i]:='7';
91000: Resultado[i]:='8';
91001: Resultado[i]:='9';
91010: Resultado[i]:='A';
91011: Resultado[i]:='B';
91100: Resultado[i]:='C';
91101: Resultado[i]:='D';
91110: Resultado[i]:='E';
91111: Resultado[i]:='F';
END;
tope:=tope+4;
END;
Writeln;
Writeln(Resultado);
END;
(****************************************************************************)
BEGIN
unir;
gruposb;
END;
(****************************************************************************)
BEGIN
pedir_numero;
signos;
partes;
binario;
exponenciadas;
resultadot;
rieee;
END;
(*******************IEEE TO DEC SP*********************************************)
PROCEDURE ieeetodecsp;
TYPE
TCadena = STRING (100); (**)
TABinario = ARRAY [1..32] OF integer; (**)
TAExponente = ARRAY [1..8] OF integer; (**)
TAMantisa = ARRAY [1..23] OF integer; (**)
TAGrupos = ARRAY[1..4] OF integer; (**)
VAR
Numero:TCadena; (**)
Binario:TABinario; (**)
Exponenteb:TAExponente; (**)
Mantisab:TAMantisa; (**)
Signob:real; (**)
Exponented:integer; (**)
Partee:integer; (**)
Parted:real; (**)
Parteer:real; (**)
PROCEDURE pedir_numero;
BEGIN
Write('Escribe el número que quieres pasar: ');
Readln(Numero);
END;
(*****************************************************************************)
PROCEDURE hextobin;
TYPE
TRGrupos = RECORD
Grupos:TAGrupos;
END;
TARGrupos = ARRAY [1..8] OF TRGrupos;
VAR
Agrupados:TARGrupos;
i,j,k:integer;
BEGIN
i:=1;
j:=1;
WHILE i<=8 DO
BEGIN
WITH AGrupados[j] DO
BEGIN
CASE Numero[i] OF
'0': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'1': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'2': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'3': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 1;
END;
'4': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'5': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'6': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'7': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 1;
END;
'8': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'9': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'A','a': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'B','b': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 1;
END;
'C','c': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'D','d': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'E','e': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'F','f': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 1;
END;
END;(*Del CASE*)
END; (*Del WITH*)
i:=i+1;
j:=j+1;
END; (*Del WHILE*)
Writeln;
k:=1;
i:=1;
WHILE i<=8 DO
BEGIN
WITH AGrupados[i] DO
BEGIN
FOR j:=1 TO 4 DO BEGIN
Binario[k]:=Grupos[j];
k:=k+1;
END;
END;
i:=i+1;
END;
END;(*Del procedimiento*)
(****************************************************************************)
PROCEDURE separar;
VAR
i:integer;
j:integer;
BEGIN
i:=1;
j:=2;
Signob:=Binario[1];
FOR i:=1 TO 8 DO BEGIN
Exponenteb[i]:=Binario[j];
j:=j+1;
END;
FOR i:=1 TO 23 DO BEGIN
Mantisab[i]:=Binario[j];
j:=j+1;
END;
Writeln('SIGNO EXPONENTE MANTISA');
Write(' ');
Write(Signob:1:0);
Write(' ');
FOR i:=1 TO 8 DO BEGIN
Write(Exponenteb[i]:0);
END;
Write(' ');
FOR i:=1 TO 23 DO BEGIN
Write(Mantisab[i]:0);
END;
Writeln;
END;
(******************************************************************************)
PROCEDURE Exp_dec;
VAR
i,j:integer;
BEGIN
Exponented:=0;
i:=1;
j:=7;
WHILE i<=8 DO BEGIN
IF Exponenteb[i]=1 THEN
Exponented:=Exponented+ (2 POW (j))
ELSE
Exponented:=Exponented;
j:=j-1;
i:=i+1;
END;
Exponented:=Exponented-127;
END;
(******************************************************************************)
PROCEDURE parted_partee;
VAR
i,j:integer;
BEGIN
j:=Exponented-1;
Partee:=2 POW (Exponented);
FOR i:=1 TO Exponented DO BEGIN
IF Mantisab[i]=1 THEN
Partee:=Partee+ (2 POW(j))
ELSE
Partee:=Partee;
j:=j-1;
END;
j:=1;
Parted:=0;
Exponented:=Exponented+1;
FOR i:=Exponented TO 23 DO BEGIN
IF Mantisab[i] = 1 THEN
Parted:=Parted + (1/(2 POW(j)))
ELSE
Parted:=Parted;
j:=j+1;
END;
Parteer:=Partee+Parted;
IF Signob = 0 THEN
Parteer:=Parteer
ELSE
Parteer:=-Parteer;
Writeln(Parteer:20:10);
END;
(******************************************************************************)
BEGIN
REPEAT
pedir_numero;
UNTIL length(Numero)=8;
hextobin;
separar;
Exp_dec;
parted_partee;
END;
(******************************IEEE TO DEC DP**********************************)
PROCEDURE ieeetodecdp;
TYPE
TCadena = string(100);
TABinario = ARRAY [1..64] OF integer; (**)
TAExponente = ARRAY [1..11] OF integer; (**)
TAMantisa = ARRAY [1..52] OF integer; (**)
TAGrupos = ARRAY[1..4] OF integer; (**)
VAR
Numero:TCadena; (**)
Binario:TABinario; (**)
Exponenteb:TAExponente; (**)
Mantisab:TAMantisa; (**)
Signob:real; (**)
Exponented:integer; (**)
Partee:integer; (**)
Parted:real; (**)
Parteer:real; (**)
PROCEDURE pedir_numero;
BEGIN
Write('Escribe el número que quieres pasar: ');
Readln(Numero);
END;
(*****************************************************************************)
PROCEDURE hextobin;
TYPE
TRGrupos = RECORD
Grupos:TAGrupos;
END;
TARGrupos = ARRAY [1..16] OF TRGrupos;
VAR
Agrupados:TARGrupos;
i,j,k:integer;
BEGIN
i:=1;
j:=1;
WHILE i<=16 DO
BEGIN
WITH AGrupados[j] DO
BEGIN
CASE Numero[i] OF
'0': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'1': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'2': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'3': BEGIN
Grupos[1] := 0;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 1;
END;
'4': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'5': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'6': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'7': BEGIN
Grupos[1] := 0;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 1;
END;
'8': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'9': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'A','a': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'B','b': BEGIN
Grupos[1] := 1;
Grupos[2] := 0;
Grupos[3] := 1;
Grupos[4] := 1;
END;
'C','c': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 0;
END;
'D','d': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 0;
Grupos[4] := 1;
END;
'E','e': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 0;
END;
'F','f': BEGIN
Grupos[1] := 1;
Grupos[2] := 1;
Grupos[3] := 1;
Grupos[4] := 1;
END;
END;(*Del CASE*)
END; (*Del WITH*)
i:=i+1;
j:=j+1;
END; (*Del WHILE*)
Writeln;
k:=1;
i:=1;
WHILE i<=16 DO
BEGIN
WITH AGrupados[i] DO
BEGIN
FOR j:=1 TO 4 DO BEGIN
Binario[k]:=Grupos[j];
k:=k+1;
END;
END;
i:=i+1;
END;
END;(*Del procedimiento*)
(****************************************************************************)
PROCEDURE separar;
VAR
i:integer;
j:integer;
BEGIN
Signob:=Binario[1];
i:=1;
FOR j:=2 TO 12 DO BEGIN
Exponenteb[i]:=Binario[j];
i:=i+1;
END;
i:=1;
FOR j:=13 TO 64 DO BEGIN
Mantisab[i]:=Binario[j];
i:=i+1;
END;
Writeln('SIGNO EXPONENTE MANTISA');
Write(' ');
Write(Signob:1:0);
Write(' ');
FOR i:=1 TO 11 DO BEGIN
Write(Exponenteb[i]:0);
END;
Write(' ');
FOR i:=1 TO 54 DO BEGIN
Write(Mantisab[i]:0);
END;
Writeln;
END;
(******************************************************************************)
PROCEDURE Exp_dec;
VAR
i,j:integer;
BEGIN
Exponented:=0;
i:=1;
j:=10;
WHILE i<=11 DO BEGIN
IF Exponenteb[i]=1 THEN
Exponented:=Exponented+ (2 POW (j))
ELSE
Exponented:=Exponented;
j:=j-1;
i:=i+1;
END;
Exponented:=Exponented-1023;
END;
(******************************************************************************)
PROCEDURE parted_partee;
VAR
i,j:integer;
BEGIN
j:=Exponented-1;
Partee:=2 POW (Exponented);
FOR i:=1 TO Exponented DO BEGIN
IF Mantisab[i]=1 THEN
Partee:=Partee+ (2 POW(j))
ELSE
Partee:=Partee;
j:=j-1;
END;
j:=1;
Parted:=0;
Exponented:=Exponented+1;
FOR i:=Exponented TO 64 DO BEGIN
IF Mantisab[i] = 1 THEN
Parted:=Parted + (1/(2 POW(j)))
ELSE
Parted:=Parted;
j:=j+1;
END;
Parteer:=Partee+Parted;
IF Signob = 0 THEN
Parteer:=Parteer
ELSE
Parteer:=-Parteer;
Writeln(Parteer:20:10);
END;
(******************************************************************************)
BEGIN
REPEAT
pedir_numero;
UNTIL length(Numero)=16;
hextobin;
separar;
Exp_dec;
parted_partee;
END;
(***********************PROGRAMA PRINCIPAL*************************************)
BEGIN
REPEAT
menu;
Readln(Opcion);
CASE Opcion OF
'd','D':BEGIN
REPEAT
menud;
Readln(Opcion2);
CASE Opcion2 OF
'S','s': BEGIN
dectoieeesp;
END;
'D','d': BEGIN
dectoieeedp;
END;
'V','v':Writeln('Volviendo al menú anterior...');
OTHERWISE
Writeln('Opción no válida por favor elija otra.');
END;
UNTIL (Opcion2 = 'V') OR (Opcion2 = 'v');
END;
'I','i':BEGIN
REPEAT
menui;
Readln(Opcion2);
CASE Opcion2 OF
'S','s': BEGIN
ieeetodecsp;
END;
'D','d': BEGIN
ieeetodecdp;
END;
'V','v': Writeln('Volviendo al menú anterior...');
OTHERWISE
Writeln('Opción no válida por favor elija otra...');
END;
UNTIL (Opcion2 = 'v') OR (Opcion2 = 'V');
END;
'S','s':Writeln('Saliendo del programa...');
OTHERWISE
Writeln('Opción no válida, por favor elija otra.');
END;
UNTIL (Opcion = 'S') OR (Opcion = 's');
END.
Suscribirse a:
Enviar comentarios (Atom)
Probaste si funciona?
ResponderEliminarClaro que funciona si no no estaría aquí
ResponderEliminarJandro ya me dijo que le quito un cacho para que no se lo copiaran todo ;)
ResponderEliminar