Перевод дробных чисел в разные системы счисления с заданной точностью - Pascal
Формулировка задачи:
Помогите, пожалуйста, составить программу с процедурой, которая переводит дробное положительное число (от 0 до 1) в систему счисления, основание которой (от 2 до 9) вводится с клавиатуры. Процесс должен прерываться, когда будет достигнута нужная точность (которая тоже вводится с клавиатуры).
Решение задачи: «Перевод дробных чисел в разные системы счисления с заданной точностью»
textual
Листинг программы
const a:string[9]='012345678'; {цифры в СС 2-9}
{процедура для перевода дробной части числа из 10-й в любую сс}
procedure FromDec(r:real;c,t:byte;var s:string);
var n:real;
i:byte;
begin
s:='0.';
i:=0;
repeat
n:=r*c;
r:=frac(n); {умножаем число на основание СС берём целую часть и
снова умножаем дробную}
s:=s+a[trunc(n)+1]; {ищим в строке элемент на позиции целой части +1}
inc(i); {увеличиваем счётчик}
until i=t;{достигли точности, конец}
end;
var r:real;
c,t:byte;
s:string;
begin
repeat
write('Введите вещественное число от 0<a<1 r=');
readln(r);
until(r>0)and(r<1);
repeat
write('Введите систему счисления от 2 до 9 c=');
readln(c);
until c in [2..9];
repeat
write('Введите точность(количество знаков после точки) от 1 до 10 t=');
readln(t);
until t in [1..10];
FromDec(r,c,t,s);
write('Число в СС ',c,'=',s);
end.
Объяснение кода листинга программы
const a:string[9]='012345678';- Создается строковая переменнаяa, содержащая цифры для систем счисления от 2 до 9.procedure FromDec(r:real;c,t:byte;var s:string);- Объявляется процедураFromDec, которая принимает вещественное числоr, основание системы счисленияc, количество знаков после точкиtи переменнуюs, в которой будет храниться результат.var n:real; i:byte;- Объявляются переменныеnдля хранения промежуточных результатов иiдля использования в цикле.s:='0.';- Присваивается начальное значение '0.' переменнойs.repeat n:=r*c; r:=frac(n); s:=s+a[trunc(n)+1]; inc(i); until i=t;- Повторяется операция умножения числаrна основание системы счисления, сохранение дробной части вrи добавление соответствующей цифры в строкуs, пока не достигнута заданная точностьt.var r:real; c,t:byte; s:string;- Объявляются переменныеrдля хранения вещественного числа,cдля хранения основания системы счисления,tдля хранения количества знаков после точки иsдля хранения результата.FromDec(r,c,t,s);- Вызывается процедураFromDecдля преобразования дробной части числа из 10-й системы счисления в выбранную.write('Число в СС ',c,'=',s);- Выводится результат преобразования в консоль.