Перевод дробных чисел в разные системы счисления с заданной точностью - 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);
- Выводится результат преобразования в консоль.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д