Приклади розв’язання задач по обробці двомірних масивів
1)Для цілочисельної квадратної матриці розмірністю 4×4 поміняти місцями перший і останній, а також другий і третій рядки.
Розв’язування. Введемо тип matrix, в якому визначимо потрібну структуру даних. Для цієї цілі ми там само введемо допоміжну структуру stroka, в якій визначимо одномiрний масив із 4-х елементів. Таким чином, тип matrix буде задано як одномiрний масив із рядків матриці. Таке подання полегшить розв’язування поставленого завдання. В розділі опису змінних введемо а як ім'я для вихідної і результуючої матриці, i, j – для звертання до її елементів при введенні і виведенні, а також допоміжні змінні r типу stroka і k-типу integer для більш слушного процесу перестановки рядків. Тут якраз буде використовуватись той факт, що в пам'яті ЕОМ двомірний масив зберігається по рядках, тобто те, що відображено при завданні відповідної структури matrix. Ми бачимо, що в разі маніпулювання зі стовпцями масиву таке подання нічого не давало б, в силу вище сказаного.
Введення вихідного масиву здійснимо, використовуючи два вкладені цикли. Виведення елементів даного масиву і масиву-результату здійснимо також, однак для подання їх у вигляді прямокутної таблиці виведення елементів рядків у внутрішньому циклі здійснимо за допомогою оператора write, а для забезпечення переходу на новий рядок після завершення друкування поточного рядка додамо оператор writeln.
Лістинг програми:
Program lab_8;
uses crt;
type
stroka=array [ 1.. 4 ] of integer;
matrix=array [ 1.. 4 ] of stroka;
var
a: matrix; {початкова матриця}
r: stroka; {Одномiрний масив}
i, j, k: integer;
begin { Введення елементів вихідного масиву }
for i: =1 to 4 do
for j: =1 to 4 do read (a [ i, j ]); {Виведення елементів вихідного масиву }
writeln ('початковий масив: ');
for i:=1 to 4 do
begin
for j: =1 to 4 do write (a [ i, j ]: 4);
writeln
end; { Обробка масиву }
k: =3;
for i: =1 to 2 do
begin r: =a [ i+k ];
a [ i+k ]: =a [ i ];
a [ i ]: =r;
k: =1
end;
{ Виведення елементів масиву – результату }
writeln;
writeln ('результат: ');
for i: =1 to 4 do
begin
for j: =1 to 4 do write (a [ i, j ]: 4);
writeln; end; end.
Результат роботи програми:
Початковий масив:
1 3 –6 8
0 –5 6 –3
4 5 7 8
–2 3 4 –4
Результат:
–2 3 4 –4
4 5 7 8
0 –5 6 –3
1 3 –6 8
Блок-схема алгоритму
2)В заданій дійсній матриці 5×3 знайти найбільший елемент і його індекси.
Розв’язування. Задаємо тип matrix як звичайну двомірну структуру даних, оскільки подання її у вигляді, аналогічному попередньому завданню, не дасть ніякого ефекту. Введення і виведення інформації здійснимо аналогічно попередньому завданню. Пошук найбільшого елемента здійснимо, використовуючи стандартний спосіб. При цьому у змінній max будемо зберігати значення цього елемента, а змінні l і k використовуємо для позначення відповідно до номерів рядка і стовпця цього елемента (індексів). У вигляді параметрів циклів введемо також цілі змінні j та i.
Лістинг програми:
Program lab_8_2; uses crt;
type
matrix=array [ 1.. 5, 1.. 3 ] of real;
var a: matrix; {початкова матриця}
i, j: integer; {параметри циклу}
max: real; {максимальний елемент}
l, k: integer; {iндекси максимального елемента}
begin
{ Введення елементів початкової матриці }
for i: =1 to 5 do
for j: =1 to 3 do read (a [ i, j ]);
{ Виведення елементів початкової матриці }
writeln ('початкова матриця: ');
for i: =1 to 5 do
begin
for j:=1 to 3 do write(a[i,j]: 8: 3);
writeln; end;
{ Пошук максимального елемента}
max: =a [ 1, 1 ]; l: =1; k: =1;
for i: =1 to 5 do
for j: =1 to 3 do
if a[i,j] >max then begin max:=a[i,j];
l: =i; k: =j
end;
{ Виведення результатів: }
writeln;
writeln ('найбільший елемент матрицi', max:8:3);
writeln('він є в',l,'рядку,', k,' стовпці'); end.
Результат роботи програми:
Початкова матриця:
2,000 –5,800 –34,900
0,450 –3,560 5,760
2,120 2,320 3,610
–0,080 4,710 9,930
0,680 0,560 7,290
Найбільший елемент матрицi рівний 9,930 знаходиться в 4 рядку, 3 стовпці.
Блок-схема алгоритму
3)Написати програму перемноження двох дійсних матриць А і В 3-го порядку.
Лістинг програми:
Program MULT; {перемноження двох матриць}
Const n=3; {задання розміру матриць}
Type Matr=array[1..n,1..n] of real; {задання двовимірного масиву}
{визначення вихідних матриць}
const A: Matr=((1.1,1.1,1.1),(2.1,2.1,2.1),(3.1,3.1,3.1));
B: Matr=((4.1,4.1,4.1),(3.1,3.1,3.1),(4.1,4.1,4.1));
{опис змінних, що використовуються}
var C: Matr; s: real; i,j: integer;
begin
for i:=1 to n do
for j:=1 to n do begin
S:=0;
for k:=1 to n do
S:=S+A[i, k]*B[k, j];
C[i, j]:=S;
end;
writeln (‘С=АВ’);
for i:=1 to n do begin
for j:=1 to n do
write (C[i, j]:4:1); writeln;
end; readln; end.
Контрольні питання
1. Як задається двомірний, багатомірний масиви?
2. Чи можна описувати багатомірні масиви безпосередньо в розділі опису змінних? Якщо можна, тоді як?
3. Як здійснюється звертання до елементів двомірних масивів?
4. Які дії можна виконувати над багатомірними масивами? Над їх елементами?
5. Чи можуть <типи iндексів> багатомірних масивів бути різноманітними?
Викладач ____________ М. О. Пашко