Help, not just anybody,
Help, you know I need someone, help.
А точнее по русски: Помогите пожалуйста, задача такая,Нужно перевести дробные числа из двоичной системы в шеснадцатиричную.я Я кое как написал прогу,работает,всё считает правильно, а училка говорит что это мараз через 10 переводить,и надо было по другому делать,я у неё спрашиваю,ну объясните мне тогда как?!Она мне сказала что я должен это сам знать.
Подскажите алгоритм перевода минуя 10-ю систему,и помоги переделать прогу.
uses crt;
var
n, int_part, fraq_part: string;
s: longint;
q: real;
_result: real;
h, r, eps, i: integer;
x, p: real;
otv, rev: string;
begin
clrscr;
Writeln ('Vvedite chislo v 2-oi sisteme');
readln(n);
int_part := copy(n, 1, pos('.', n) - 1); {отделяем целую часть двоичного числа}
fraq_part := copy(n, pos('.', n) + 1, 255); {отделяем дробную часть числа}
_result := 0.0;
s := 1;
while int_part <> '' do begin
_result := _result + (ord(int_part[length(int_part)]) - ord('0')) * s;
delete(int_part, length(int_part), 1);
s := s * 2;
end;
writeln(_result:10:5);
q := 1 / 2;
while fraq_part <> '' do begin
_result := _result + (ord(fraq_part[1]) - ord('0')) * q;
delete(fraq_part, 1, 1);
q := q / 2;
end;
writeln('Promezhytochi rezyltat =',_result:10:5);
x:=_result;
h:= trunc(x); {находим целую часть}
p:= x-h; {находим дробную часть}
repeat
r:= h mod 16; {сохраняем остаток}
h:= h div 16; {оставляем только целую часть}
if r<10 then otv:= otv + chr (r+48) {код цифры в ascii таблице равен самой цифре +48}
else otv:= otv+chr (r+55); {шаг до буквы А от 10 = 55}
until h<=0;
for i:=1 to length(otv) do rev:= rev+otv[length(otv)-i+1]; {записываем остатки задом наперёд}
otv:= rev;
eps:=0; {точность дробной части}
otv:= otv+'.';
repeat
r:= trunc (p*16); {берём целую часть}
p:= p*16-r; {оставляем только дробную}
if r<10 then otv:= otv+chr (r+48)
else otv:= otv+chr (r+55);
inc (eps);
until (p=0) or (eps>10);
writeln ('Chislo v 16 sisteme = ',otv);
Readln;
end.