Двовимірні масиви - матриці
Двовимірний масив в Паскалі трактується як одновимірний масив, тип елементів якого також є масивом (масив масивів). Положення елементів у двовимірних масивах описується двома індексами. Їх можна представити у вигляді прямокутної таблиці або матриці.
Розглянемо матрицю розмірністю 3 * 3, тобто в ній буде три рядки, а в кожному рядку по три елементи:

Кожен елемент має свій номер, як у одновимірних масивів, але зараз номер уже складається з двох чисел - номери рядка, в якій знаходиться елемент, і номера стовпчика. Таким чином, номер елемента визначається перетином рядка і стовпця. Наприклад, a21 - це елемент, що стоїть в другому рядку і в першому стовпці.
Ми вже вміємо описувати одновимірні масиви, елементи яких можуть мати будь-який тип, а, отже, і самі елементи можуть бути масивами. Розглянемо наступний опис типів і змінних:
Vector = array [1..5] of <тип_элементов>;
Matrix = array [1..10] of vector;
Ми оголосили матрицю m, що складається з 10 рядків, в кожній з яких 5 стовпців. При цьому до кожної i-му рядку можна звертатися m [i], а кожному j-му елементу всередині i-го рядка - m [i, j].
Визначення типів для двовимірних масивів можна задавати і в одному рядку:
Matrix = array [1..5] of array [1..10] of <тип элементов>;
matrix = array [1..5, 1..10] of <тип элементов>;
Звернення до елементів двовимірного масиву має вигляд: M [i, j]. Це означає, що ми хочемо отримати елемент, розташований в i-му рядку і j-му стовпці. Тут головне не переплутати рядки зі стовпчиками, а то ми можемо знову отримати звернення до неіснуючого елементу. Наприклад, звернення до елементу M [10, 5] має правильну форму записи, але може викликати помилку в роботі програми.
Основні дії з матрицями
Все, що було сказано про основні діях з одновимірними масивами, справедливо і для матриць. Єдина дія, яке можна здійснити над однотипними матрицями цілком - це привласнення. Тобто якщо в програмі у нас описані дві матриці одного типу, наприклад,
matrix = array [1..5, 1..10] of integer;
то в ході виконання програми можна привласнити матриці a значення матриці b (a: = b). Всі інші дії виконуються поелементно, при цьому над елементами можна виконувати всі допустимі операції, які визначені для типу даних елементів масиву. Це означає, що якщо масив складається з цілих чисел, то над його елементами можна виконувати операції, визначені для цілих чисел, якщо ж масив складається з символів, то до них застосовні операції, визначені для роботи з символами.
Введення матриці. Для послідовного введення елементів одновимірного масиву ми використовували цикл for, в якому змінювали значення індексу з 1-го до останнього. Але становище елемента в двовимірному масиві визначається двома індексами: номером рядка і номером стовпця. Це означає, що нам потрібно буде послідовно змінювати номер рядка з 1-ї до останньої і в кожному рядку перебирати елементи стовпців з 1-го до останнього. Значить, нам буде потрібно два цикли for, причому один з них буде вкладений в інший.
Розглянемо приклад введення матриці з клавіатури:
matrix = array [1..5, 1..10] of integer;
Матрицю можна заповнити випадковим чином, тобто використовувати функцію random (N), а також привласнити кожному елементу матриці значення деякого виразу. Спосіб заповнення матриці вибирається залежно від поставленого завдання, але в будь-якому випадку повинен бути визначений кожен елемент в кожному рядку і кожному стовпці.
Висновок матриці на екран. Висновок елементів матриці також здійснюється послідовно, необхідно надрукувати елементи кожного рядка і кожного стовпця. При цьому хотілося б, щоб елементи, які стоять в одному рядку, друкувалися поруч, тобто в рядок, а елементи стовпчика розташовувалися один під іншим. Для цього необхідно виконати наступну послідовність дій (розглянемо фрагмент програми для масиву, описаного в попередньому прикладі):
Зауваження (це важливо!): Дуже часто в програмах студентів зустрічається помилка, коли введення з клавіатури або висновок на екран масиву намагаються здійснити в такий спосіб: readln (a), writeln (a), де а - це змінна типу масив. При цьому їх дивує повідомлення компілятора, що змінну цього типу неможливо вважати або надрукувати. Може бути, ви зрозумієте, чому цього зробити не можна, якщо представите N кухлів, що стоять в ряд, а у вас в руках, наприклад, чайник з водою. Можете ви по команді «налий воду» наповнити відразу все гуртки? Як би ви не старалися, але в кожну кружку доведеться наливати окремо. Заповнення і висновок на екран елементів масиву також має здійснюватися послідовно і поелементно, тому що в пам'яті ЕОМ елементи масиву розташовуються в послідовних комірках.