Умножение на одну цифру в разных системах счисления - 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) с полученными значениями переменных. Код реализует умножение числа на одну цифру в разных системах счисления и выводит результат этого умножения.