Умножение на одну цифру в разных системах счисления - Pascal

Узнай цену своей работы

Формулировка задачи:

Составьте программу выполнения умножения на одну цифру с целыми числами в системе счисления, основание которой (от 2 до 9) вводится с клавиатуры без перевода чисел в десятичную систему счисления

Решение задачи: «Умножение на одну цифру в разных системах счисления»

textual
Листинг программы
  1. type mas=array[byte] of byte;
  2. //параметры: массив, размер массива, основание СС, цифра
  3. procedure umn(var a:mas;n,osn,c:byte);
  4. var i,j,p,x:integer;
  5. begin
  6. p:=0;//перенос
  7. for i:=n downto 1 do/идем с конца и умножаем "столбиком"
  8.  begin
  9.   x:=a[i]*c+p;
  10.   a[i]:=x mod osn; //остаток
  11.   p:=x div osn; //новый перенос
  12.  end;
  13. if p>0 then //если последний перенос не 0
  14.  begin
  15.   n:=n+1; //увеличим размер на 1
  16.   for j:=n downto 2 do //сдвинем массив вправо
  17.   a[j]:=a[j-1];
  18.   a[1]:=p; //перенос запишем вперед
  19.  end;
  20. writeln('Результат умножения');
  21. for i:=1 to n do
  22. write(a[i]);
  23. end;
  24. var n,i,osn,k:byte;
  25.     s:string;
  26.     a:mas;
  27. begin
  28. repeat
  29. write('Введите систему счисления от 2 до 9 osn=');
  30. readln(osn);
  31. until osn in [2..9];
  32. writeln('Введите число в СС ',osn);
  33. repeat
  34. readln(s);
  35. k:=0;
  36. i:=1;
  37. while(i<=length(s))and(k=0) do
  38. if not(s[i] in ['0'..chr(osn+47)])then k:=1
  39. else inc(i);
  40. if k=1 then writeln('Это не число в СС ',osn,' повторите ввод');
  41. until k=0;
  42. n:=length(s);
  43. for i:=1 to n do  //преобразуем строку в массив цифр
  44. a[i]:=ord(s[i])-48;
  45. repeat
  46. write('Введите цифру от 0 до ',osn-1,' k=');
  47. readln(k);
  48. until k in [0..osn-1];
  49. umn(a,n,osn,k);
  50. end.

Объяснение кода листинга программы

  1. Объявляется тип массива mas=array[byte] of byte; //массив из байтов
  2. Создается процедура umn, принимающая параметры: var a:mas - массив, n - размер массива, osn - основание СС (системы счисления), c - цифра
  3. Внутри процедуры umn объявляются переменные i, j, p, x: integer
  4. Устанавливается начальное значение переменной p:=0 (перенос)
  5. Запускается цикл, итерирующийся от n до 1, в котором происходит умножение столбиком и расчет переноса
  6. Если последний перенос больше 0, то увеличивается размер массива (n:=n+1) и сдвигается исходный массив вправо, последний перенос записывается в начале массива
  7. Выводится результат умножения
  8. Затем объявляется переменные n, i, osn, k: byte; s: string; a: mas;
  9. Создается цикл repeat-until для ввода значения osn (системы счисления) в диапазоне от 2 до 9
  10. Пользователю предлагается ввести число в выбранной системе счисления
  11. Проверяется корректность введенного числа и его соответствие системе счисления
  12. Вводится цифра k, проверяется ее корректность
  13. Запускается процедура умножения umn(a, n, osn, k) с полученными значениями переменных. Код реализует умножение числа на одну цифру в разных системах счисления и выводит результат этого умножения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы