Масиви
4. Матриці та багатовимірні масиви
Розглянемо прямокутну таблицю з m n однотипиних елементів як послідовність із m рядків, у кожному з яких n елементів. Послідовності певної довжини подаються в мовах програмування масивами. Отже, виникає поняття "масив, елементами якого є масиви", або двовимірний масив. Якщо елементи прямокутної таблиці самі є послідовностями або таблиці утворюють послідовність певної довжини, то виникає поняття тривимірного масиву тощо.
Означення багатовимірних масивів та зображення їх елементів у мові Паскаль опишемо за допомогою простого прикладу. Позиція в грі "хрестики-нулики на полі 3 3" подається квадратною таблицею з символів 'x', '0' або ' ' (пропуск). Пронумеруємо клітинки поля, як у шахах – літерами 'a', 'b', 'c' по горизонталі та числами 1, 2, 3 по вертикалі. Тоді рядки таблиці можна подати масивами типуtype Row = array [ 'a' .. 'c' ] of char;
Таблицю можна розглянути як послідовність трьох рядків і подати масивом типу
type Table = array [ 1 .. 3 ] of Row;
Партія, тобто послідовність позицій, має довжину не більше 9, і може подаватися масивом таблиць:
type Game = array [ 1 .. 9 ] of Table;
Масиви типу Table мають два виміри: номер рядка та номер символу в ньому; масиви типу Game – три: номери таблиці, рядка та символу. Вимір 1..9 у типі Game називається зовнішнім, вимір 'a'..'c', що нумерує символи в рядках, – внутрішнім.
Тип Game можна задати еквівалентним виразом, не означаючи імен типів Row і Table, а саме:
type Game = array [ 1 .. 9 ] of
array [ 1 .. 3 ] of
array [ 'a' .. 'c' ] of char;
Нехай A – змінна типу Game. Вираз вигляду A[ i ], де 1 i 9, задає змінну типу Table, або типу
array [ 1 .. 3 ] of array [ 'a' .. 'c' ] of char;
вираз вигляду A[i][j], де 1 j 3, – змінну типу Row, або типу
array[ 'a' .. 'c' ] of char;
вираз вигляду A[i][j][k], де 'a' k 'c', – змінну типу char.
Мова Паскаль допускає іншу форму задання типів та елементів багатовимірних масивів: виміри та індекси записуються через кому в спільних дужках. Так, означення
type Game1 = array [ 1 .. 9, 1 .. 3, 'a' .. 'c' ] of char
еквівалентне означенню типу Game, а вираз A[i, j, k] – виразові A[i][j][k].
Елементи багатовимірних масивів розташовуються в пам'яті послідовно, найшвидше в них змінюється внутрішній індекс, найповільніше – зовнішній. Зокрема, двовимірні масиви (матриці) розташовуються за рядками. Так, послідовні числа масиву типу