До традиційних обчислювальних алгоритмів обробки багатовимірних масивів належать: алгоритми пошуку максимальних і мінімальних елементів та індексів їх розміщення у масиві; обчислення сум і добутків елементів рядків і стовпчиків матриць; перестановки місцями рядків і стовпчиків матриць; вилучення рядків і стовпчиків матриць; обчислення суми, різниці та добутку матриць; транспонування матриць та інші. Розглянемо деякі з цих алгоритмів.
Приклад.Нехай задана матриця
,
. Розробити програму, яка перестановкою рядків і стовпчиків перетворює матрицю так, щоб мінімальний елемент матриці (вважається, що він єдиний) розмістився в правому нижньому куті.
Алгоритм розв’язання задачі складається з двох частин. Перша частина – це пошук номера рядка
і номера стовпчика
, на перетині яких розміщений мінімальний елемент матриці. Друга частина – це переміщення мінімального елемента матриці у правий нижній кут. Для цього потрібно поміняти місцями
-ий і
-ий рядки та
-ий і
-ий стовпчики матриці.
Для реалізації алгоритму командою File|New Application створимо новий проект. Присвоїмо формі заголовок Обчислення функції (властивість Caption). Командою File|Save All запишемо програмний модуль у файл з іменем ULAB4_1.pas, а проект – PLAB4_1.dpr.
Розробимо форму для введення початкових даних і виведення результату Рис.4.1.
Для введення розмірності матриці n розмістимо на формі компонент Edit. Для введення елементів матриці
та виведення перетвореної матриці розмістимо на формі два компоненти StringGrid з такими властивостями:
· Cels(ACol,ARow:integer):string – вмістиме комірки з координатами ACol, Arow;
· Cols(Index:integer): Tstrings – вмістиме колонки Index;
· Rows(Index:integer): Tstrings – вмістиме рядка Index;
· Name: string – ім’я компонента;
· Col: longint – номер поточного стовпця;
· Row: longint – номер поточного рядка;
· ColCount: longint – кількість стовпців;
· RowCount: longint – кількість рядків;
· FixedCol: longint – кількість стовпців фіксованої зони;
· FixedRow: longint – кількість рядків фіксованої зони;
· Options.goEditing: Boolean – дозвіл на редагування;
· Options.goTabs: Boolean – переміщення курсора кл. Tab.

Рис.4.1 Форма Перетворення матриці
Встановимо компонентам StringGrid такі значення властивостей: FixedCols=0, FixedRows=0, Options.goEditing=true, Options.goTabs=true.
Крім цього, розмістимо на формі три керуючі кнопки (компонент Button) з написами Введення, Обчислення та Вихід.
Обробники кнопок Введення Обчислення містяться у програмному модулі ULAB4_1 і мають вигляд:
unit ULAB4_1;
interface
………………
implementation
{$R *.DFM}
var n:integer;
{Обробник кнопки Введення}
procedure TForm1.Button1Click(Sender: TObject);
begin
if edit1.Text=''then ShowMessage('Введіть n')
else begin n:=strtoint(Edit1.Text);
if (n<0)or(n>14)then ShowMessage('Недопустиме n')
else begin
StringGrid1.RowCount:=n;
StringGrid1.ColCount:=n;
StringGrid2.RowCount:=n;
StringGrid2.ColCount:=n;
end;
end;
end;
{Обробник кнопки Введення}
procedure TForm1.Button2Click(Sender: TObject);
Type Tmas=array[0..14] of integer;
Var a: array[0..14] of Tmas;
b:Tmas;
i, j, k, l, r: integer;
begin
{Введення початкових даних}
for i:=0 to n-1 do
for j:=0 to n-1 do
a[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
{Пошук координат мінімального елемента матриці }
k:=0; l:=0;
for i:=0 to n-1 do
for j:=0 to n-1 do
if a[i,j]<a[k,l] then begin k:=i; l:=j;end;
{Перестановка місцями
-го і
-го рядків матриці}
b:=a[n-1]; a[n-1]:=a[k]; a[k]:=b;
{Перестановка місцями
-го і
-го стовпців матриці}
for i:=0 to n-1 do
begin r:=a[i,n-1]; a[i,n-1]:=a[i,l]; a[i,l]:=r; end;
{Виведення перетвореної матриці }
for i:=0 to n-1 do
for j:=0 to n-1 do
StringGrid2.Cells[j,i]:=IntToStr(a[i,j]);
end;
end.
Приклад.Нехай задано дві матриці
і
,
. Розробити програму, яка обчислює добуток двох матриць
.
Наведемо алгоритм обчислення добутку двох матриць. Добутком матриць
і
є матриця
, елементи якої
обчислюються за правилом

тобто елемент
, який стоїть в
-му рядку і
-му стовпчику, дорівнює сумі добутків відповідних елементів
-го рядка матриці
і
-го стовпчика матриці
.
Для реалізації алгоритму командою File|New Application створимо новий проект. Присвоїмо формі заголовок Обчислення функції (властивість Caption). Командою File|Save All запишемо програмний модуль у файл з іменем ULAB4_2.pas, а проект – PLAB4_2.dpr.
Розробимо форму для введення початкових даних і виведення результату Рис.4.2.
Аналогічно, як у попередньому прикладі для введення розмірності матриць n розмістимо на формі компонент Edit. Для введення елементів матриць
і
та виведення їх добутку
розмістимо на формі три компоненти StringGrid і встановимо їм такі ж значення властивостей.
Крім цього, розмістимо на формі три керуючі кнопки з написами Введення, Обчислення та Вихід.
Обробник кнопки Обчислення міститься у програмному модулі ULAB4_2.

Рис.4.2 Форма Добуток матриць
unit ULAB4_2;
. . . . . . . . . . . . . . . . . .
procedure TForm1.Button2Click(Sender: TObject);
Type Tmas=array[0..14] of real;
Var a, b, c: array[0..14] of Tmas;
i, j, k: integer;
begin
{Введення початкових даних}
for i:=0 to n-1 do
for j:=0 to n-1 do
a[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
for i:=0 to n-1 do
for j:=0 to n-1 do
b[i,j]:=StrToFloat(StringGrid2.Cells[j,i]);
{Обчислення добутку матриць a і b }
for i:=0 to n-1 do
for j:=0 to n-1 do
begin c[i,j]:=0;
for k:=0 to n-1 do
c[i,j]:= c[i,j]+a[i,k]*b[k,j];
end;
{Виведення добутку матриць}
for i:=0 to n-1 do
for j:=0 to n-1 do
StringGrid3.Cells[j,i]:=FloatToStr(c[i,j]);
end;
end.