- •3. Структуровані типи даних. Масиви
- •Лабораторна робота № 3 Алгоритми обробки масивів
- •4. Алгоритми обробки багатовимірних масивів
- •Лабораторна робота № 4 Алгоритми обробки багатовимірних масивів
- •5. Упорядкування і пошук даних
- •Лабораторна робота № 5 Упорядкування і пошук даних
- •6. Структуровані типи даних. Множини
- •Лабораторна робота № 6 Множини
4. Алгоритми обробки багатовимірних масивів
До традиційних обчислювальних алгоритмів обробки багатовимірних масивів (матриць) належать: алгоритми пошуку максимальних і мінімальних елементів та номерів рядків і стовпчиків, в яких вони розміщуються; обчислення сум і добутків елементів рядків і стовпчиків; перестановки місцями рядків і стовпчиків; вилучення рядків і стовпчиків; обчислення суми, різниці та добутку матриць; транспонування матриць та інші. Розглянемо деякі з цих алгоритмів.
Розглянемо алгоритм перетворення матриці.
Приклад. Нехай задана матриця ,. Розробити програму, яка перестановкою рядків і стовпчиків перетворює цю матрицю так щоб мінімальний елемент матриці (вважається, що він єдиний) розмістився в правому нижньому куті.
Алгоритм буде складатися з двох частин. Перша частина – це пошук номера рядка і номера стовпчика, на перетині яких розміщений мінімальний елемент матриці. Друга частина – це переміщення мінімального елемента матриці у правий нижній кут. Для цього потрібно поміняти місцями-ий і-ий рядки та-ий і-ий стовпчики матриці. Програма перетворення матриці має вигляд:
Program LABR4_1;
{$APPTYPE CONSOLE}
uses Sysutils;
VAR a: array[1..15,1..15] of integer;
n, i, j, k, l, r: integer;
BEGIN
{Введення початкових даних}
writeln(‘Введіть розмір матриці а, (n<=15)’);
readln(n);
writeln(‘Введіть елементи матриці а по рядках’);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
{Пошук координат мінімального елемента матриці }
k:=1; l:=1;
for i:=1 to n do
for j:=1 to n do
if a[i,j]<a[k,l] then begin k:=i; l:=j;end;
{Перестановка місцями -го і-го рядків матриці}
for i:=1 to n do
begin r:=a[n,i]; a[n,i]:=a[k,i]; a[k,i]:=r; end;
{Перестановка місцями -го і-го стовпців матриці}
for i:=1 to n do
begin r:=a[i,n]; a[i,n]:=a[i,l]; a[i,l]:=r; end;
{Виведення перетвореної матриці по рядках}
for i:=1 to n do
begin writeln;
for j:=1 to n do
write(a[i,j]:5 );
end;
END.
Розглянемо алгоритм обчислення добутку двох матриць.
Приклад. Нехай задано дві матриці і,. Розробити програму, яка обчислює добуток двох матриць.
Добутком матриць іє матриця, елементи якоїобчислюються за правилом
тобто елемент , який стоїть в-му рядку і-му стовпчику, дорівнює сумі добутків відповідних елементів-го рядка матриціі-го стовпчика матриці. Програма обчислення добутку матриць у консольному режимі має вигляд:
Program LABR4_1;
{$APPTYPE CONSOLE}
uses Sysutils;
VAR a, b, c: array[1..15,1..15] of integer;
n, i, j, k: integer;
BEGIN
{Введення початкових даних}
writeln(‘Введіть розмір матриць а і b, (n<=15)’);
readln(n);
writeln(‘Введіть елементи матриці а по рядках’);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
writeln(‘Введіть елементи матриці b по рядках’);
for i:=1 to n do
for j:=1 to n do
read(b[i,j]);
{Обчислення добутку матриць a і b }
for i:=1 to n do
for j:=1 to n do
begin c[i,j]:=0;
for k:=1 to n do
c[i,j]:= c[i,j]+a[i,k]*b[k,j];
end;
{Виведення матриці c по рядках}
for i:=1 to n do
begin writeln;
for j:=1 to n do
write(a[i,j]:5 );
end;
readln;
END.