Какую функцию выполняет оператор ** - Free Pascal

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

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

Наткнулся на оператор ** в статье про арифметические операции. Вот что там написано: To exponentiate two types, the ** exponentiation operator must be overloaded. Как я понял это что-то вроде операции возведения в степень, но вопрос в том, как ее использовать. Пробовал записывать его между двумя операндами, но компилятор ругается на типы переменных. Что все-таки делает этот оператор и где его можно использовать?

Решение задачи: «Какую функцию выполняет оператор **»

textual
Листинг программы
  1. {$mode objfpc}
  2.  
  3. const
  4.   size = 4;
  5.  
  6. type
  7.   TMatrix = array[1 .. size, 1 .. size] of double;
  8.  
  9. operator * (const a, b: TMatrix) m: TMatrix;
  10. var i, j, k: integer;
  11. begin
  12.   for i := 1 to size do
  13.     for j := 1 to size do begin
  14.       m[i, j] := 0;
  15.       for k := 1 to size do
  16.         m[i, j] := m[i, j] + a[i, k] * b[k, j]
  17.     end;
  18. end;
  19.  
  20. operator * (const a: TMatrix; const f: double) m: TMatrix;
  21. var i, j: integer;
  22. begin
  23.   for i := 1 to size do
  24.     for j := 1 to size do
  25.       m[i, j] := f * a[i, j]
  26. end;
  27.  
  28. operator + (const a, b: TMatrix) m: TMatrix;
  29. var i, j: integer;
  30. begin
  31.   for i := 1 to size do
  32.     for j := 1 to size do
  33.       m[i, j] := a[i, j] + b[i, j]
  34. end;
  35.  
  36. { Возведение матрицы в степень }
  37. operator ** (const a: TMatrix; const pow: integer) m: TMatrix;
  38. var i, j: Integer;
  39. begin
  40.   if pow = 0 then begin
  41.     for i := 1 to size do
  42.       for j := 1 to size do
  43.         m[i, j] := Byte(i = j);
  44.     exit
  45.   end;
  46.  
  47.   m := a;
  48.   for i := 1 to pred(pow) do
  49.     m := m * a;
  50. end;
  51.  
  52. procedure matrixPrint(a: TMatrix);
  53. var i, j: integer;
  54. begin
  55.   for i := 1 to size do begin
  56.     for j := 1 to size do
  57.       write(a[i, j]:9:2);
  58.     writeln
  59.   end
  60. end;
  61.  
  62.  
  63. const
  64.   n = 3;
  65.   p: array[1 .. n] of double = (1.0, -2.0, 3.0);
  66.  
  67. const
  68.   a: TMatrix = (
  69.     (10, 11, 14, 16),
  70.     (12, 17, 10, 16),
  71.     ( 8, 12, 12,  7),
  72.     ( 8,  5, 17,  1)
  73.   );
  74.  
  75. var
  76.   Res: TMatrix;
  77.   i: Integer;
  78.  
  79. begin
  80.   matrixPrint(a);
  81.  
  82.   for i := 1 to n do
  83.     res := res + (a ** (n - i)) * p[i]; { Все вычисление многочлена матрицы записывается в одну строчку }
  84.  
  85.   matrixPrint(Res)
  86. end.

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

В данном коде на языке Free Pascal реализована работа с матрицами.

  1. В первой части кода (с 1 по 12 строчку) определены операции над матрицами: умножение матрицы на число, сложение двух матриц, а также возведение матрицы в степень.
  2. Далее (с 13 по 20 строчку) определена функция печати матрицы, которая выводит значения матрицы на экран.
  3. В конце кода (с 21 по 30 строчку) определён многочлен, вычисление которого производится с помощью возведения матрицы в степень и добавления произведений элементов матрицы и коэффициентов многочлена. Результат вычисления выводится на экран.

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


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

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

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

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

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

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