Какую функцию выполняет оператор ** - Free Pascal
Формулировка задачи:
Наткнулся на оператор ** в статье про арифметические операции. Вот что там написано:
To exponentiate two types, the ** exponentiation operator must be overloaded.
Как я понял это что-то вроде операции возведения в степень, но вопрос в том, как ее использовать. Пробовал записывать его между двумя операндами, но компилятор ругается на типы переменных.
Что все-таки делает этот оператор и где его можно использовать?
Решение задачи: «Какую функцию выполняет оператор **»
textual
Листинг программы
{$mode objfpc} const size = 4; type TMatrix = array[1 .. size, 1 .. size] of double; operator * (const a, b: TMatrix) m: TMatrix; var i, j, k: integer; begin for i := 1 to size do for j := 1 to size do begin m[i, j] := 0; for k := 1 to size do m[i, j] := m[i, j] + a[i, k] * b[k, j] end; end; operator * (const a: TMatrix; const f: double) m: TMatrix; var i, j: integer; begin for i := 1 to size do for j := 1 to size do m[i, j] := f * a[i, j] end; operator + (const a, b: TMatrix) m: TMatrix; var i, j: integer; begin for i := 1 to size do for j := 1 to size do m[i, j] := a[i, j] + b[i, j] end; { Возведение матрицы в степень } operator ** (const a: TMatrix; const pow: integer) m: TMatrix; var i, j: Integer; begin if pow = 0 then begin for i := 1 to size do for j := 1 to size do m[i, j] := Byte(i = j); exit end; m := a; for i := 1 to pred(pow) do m := m * a; end; procedure matrixPrint(a: TMatrix); var i, j: integer; begin for i := 1 to size do begin for j := 1 to size do write(a[i, j]:9:2); writeln end end; const n = 3; p: array[1 .. n] of double = (1.0, -2.0, 3.0); const a: TMatrix = ( (10, 11, 14, 16), (12, 17, 10, 16), ( 8, 12, 12, 7), ( 8, 5, 17, 1) ); var Res: TMatrix; i: Integer; begin matrixPrint(a); for i := 1 to n do res := res + (a ** (n - i)) * p[i]; { Все вычисление многочлена матрицы записывается в одну строчку } matrixPrint(Res) end.
Объяснение кода листинга программы
В данном коде на языке Free Pascal реализована работа с матрицами.
- В первой части кода (с 1 по 12 строчку) определены операции над матрицами: умножение матрицы на число, сложение двух матриц, а также возведение матрицы в степень.
- Далее (с 13 по 20 строчку) определена функция печати матрицы, которая выводит значения матрицы на экран.
- В конце кода (с 21 по 30 строчку) определён многочлен, вычисление которого производится с помощью возведения матрицы в степень и добавления произведений элементов матрицы и коэффициентов многочлена. Результат вычисления выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д