GAECHKA
Твоя помощница в решении задач

Решение задачи на квадратные матрицы

Для квадратных матриц A, B, C, которые имеют размерность 3x3, найти матрицу D. Сделать программу под решение матрицы вида D=3A+4BC^T-C. Ввод исходных данных организовать с клавиатуры обязательно с помощью подпрограммы-процедуры. Повторяющиеся элементы кода тоже желательно заключить в процедуры.
0
вопрос задан

Источник


2 ответа
В формуле для вычисления матриц присутствует переменная T, значение которой не указано, поэтому я произвольно выбрал, что T - это число, а его значение равно 2.

program Project1;
type
  TArr = array [1..10,1..10] of integer;
 
procedure InfOutMatrix (arr: TArr; narr,marr: integer);
// Процедура для вывода элементов массива на экран.
var
   i,j: integer;
begin
  for i:= 1 to narr do
    begin
    for j:= 1 to marr do
      Write(arr[i,j]:4);
    writeln;
    end;
end;
 
procedure UniversalInMatrix(var arr:TArr; narr,marr: integer);
// Процедура для универсального ввода значений элементов в массивы.
var
   i,j: integer;
   vib: integer;
begin
  Writeln('Введите 1, если ввод чисел будет осуществляться в ручном режиме');
  Writeln('Введите 2, если числа будут заданы генератором случайных чисел');
  Readln(vib);
  case vib of
  1: for i:= 1 to narr do
      for j:= 1 to marr do
       begin
        write('Введите элемент ',i,' строки ',j,' столбца: ');
        Readln(arr[i,j]);
       end;
  2: for i:=1 to narr do
      for j:=1 to marr do
        arr[i,j]:= random(101) - 50;
 end;
end;
 
procedure MatrixPowInteger(arr:TArr; narr,marr: integer; num: integer; crr: TArr);
// Процедура для умножения матрицы на число.
var
  i,j: integer;
begin
  for i:= 1 to narr do
    for j:= 1 to marr do
       crr[i,j]:= num*arr[i,j];
end;
 
 
procedure MatrixPowMatrix(arr,brr:TArr; narr: integer; var crr: TArr);
// Процедура для перемножения матрицы на матрицу (используются только квадратные матрицы).
var
  i,j,k: integer;
begin
for i:=1 to narr do
  for j:=1 to narr do
    begin
      crr[i,j]:= 0;
      for k:=1 to narr do
        crr[i,j]:= crr[i,j] + arr[i,k]*brr[k,j];
    end;
end;
 
procedure MatrixSubtractionAdditionMatrix(arr,brr:TArr; narr,add: integer; var crr: TArr);
// Процедура для вычитания (сложения) матрицы из матрицы (используются только квадратные матрицы).
var
  i,j: integer;
begin
for i:=1 to narr do
  for j:=1 to narr do
     if add = 1 then
       crr[i,j]:= arr[i,j] - brr[i,j]
     else
       crr[i,j]:= arr[i,j] + brr[i,j]
end;
 
 
var
  a,b,c,d: TArr;  // Переменные для хранения двумерного массива.
  a1,a2,a3,a4,a5: TArr;  // Промежуточные переменные для вычисления результатов.
begin
  Randomize;
  UniversalInMatrix(a,3,3);
  Writeln('Исходная матрица A:');
  InfOutMatrix(a,3,3);
  UniversalInMatrix(b,3,3);
  Writeln('Исходная матрица B:');
  InfOutMatrix(a,3,3);
  UniversalInMatrix(c,3,3);
  Writeln('Исходная матрица C:');
  InfOutMatrix(a,3,3);
  // D= 3A + 4BC^T - C
  // D= A1 + A2CC - C
  // D= A1 + A2A3 - C
  // D= A1 + A4 - C
  // D= A5 - C
  // D
  MatrixPowInteger(a,3,3,3,a1);
  MatrixPowInteger(a,3,3,4,a2);
  MatrixPowMatrix(c,c,3,a3);
  MatrixPowMatrix(a2,a3,3,a4);
  MatrixSubtractionAdditionMatrix(a1,a4,3,2,a5);
  MatrixSubtractionAdditionMatrix(a5,c,3,1,d);
  Writeln('Измененная матрица:');
  InfOutMatrix(d,3,3);
  readln;
end.
Степень Т - транспонирование, ввод должен осуществляться исключительно с клавиатуры, программа должна находить окончательный результат решения матрицы, формула которой представлена выше