Умножение на одну цифру в разных системах счисления - Pascal
Формулировка задачи:
Составьте программу выполнения умножения на одну цифру с целыми числами в системе счисления, основание которой (от 2 до 9) вводится с клавиатуры без перевода чисел в десятичную систему счисления
Решение задачи: «Умножение на одну цифру в разных системах счисления»
textual
Листинг программы
- type mas=array[byte] of byte;
- //параметры: массив, размер массива, основание СС, цифра
- procedure umn(var a:mas;n,osn,c:byte);
- var i,j,p,x:integer;
- begin
- p:=0;//перенос
- for i:=n downto 1 do/идем с конца и умножаем "столбиком"
- begin
- x:=a[i]*c+p;
- a[i]:=x mod osn; //остаток
- p:=x div osn; //новый перенос
- end;
- if p>0 then //если последний перенос не 0
- begin
- n:=n+1; //увеличим размер на 1
- for j:=n downto 2 do //сдвинем массив вправо
- a[j]:=a[j-1];
- a[1]:=p; //перенос запишем вперед
- end;
- writeln('Результат умножения');
- for i:=1 to n do
- write(a[i]);
- end;
- var n,i,osn,k:byte;
- s:string;
- a:mas;
- begin
- repeat
- write('Введите систему счисления от 2 до 9 osn=');
- readln(osn);
- until osn in [2..9];
- writeln('Введите число в СС ',osn);
- repeat
- readln(s);
- k:=0;
- i:=1;
- while(i<=length(s))and(k=0) do
- if not(s[i] in ['0'..chr(osn+47)])then k:=1
- else inc(i);
- if k=1 then writeln('Это не число в СС ',osn,' повторите ввод');
- until k=0;
- n:=length(s);
- for i:=1 to n do //преобразуем строку в массив цифр
- a[i]:=ord(s[i])-48;
- repeat
- write('Введите цифру от 0 до ',osn-1,' k=');
- readln(k);
- until k in [0..osn-1];
- umn(a,n,osn,k);
- end.
Объяснение кода листинга программы
- Объявляется тип массива mas=array[byte] of byte; //массив из байтов
- Создается процедура umn, принимающая параметры: var a:mas - массив, n - размер массива, osn - основание СС (системы счисления), c - цифра
- Внутри процедуры umn объявляются переменные i, j, p, x: integer
- Устанавливается начальное значение переменной p:=0 (перенос)
- Запускается цикл, итерирующийся от n до 1, в котором происходит умножение
столбиком
и расчет переноса - Если последний перенос больше 0, то увеличивается размер массива (n:=n+1) и сдвигается исходный массив вправо, последний перенос записывается в начале массива
- Выводится результат умножения
- Затем объявляется переменные n, i, osn, k: byte; s: string; a: mas;
- Создается цикл repeat-until для ввода значения osn (системы счисления) в диапазоне от 2 до 9
- Пользователю предлагается ввести число в выбранной системе счисления
- Проверяется корректность введенного числа и его соответствие системе счисления
- Вводится цифра k, проверяется ее корректность
- Запускается процедура умножения umn(a, n, osn, k) с полученными значениями переменных. Код реализует умножение числа на одну цифру в разных системах счисления и выводит результат этого умножения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д