Двовимірні масиви можна уявити собі як масиви масивів. Ця структура відповідає матриці в математиці, прямокутній таблиці даних, наприклад, відомості з результатами екзаменаційної сесії групи студентів, тощо. Найкращою організацією таких даних і буде двовимірний масив, тобто масив , що складається із масивів оцінок кожного студента. Можна таку структуру розглядати і як масив масивів оцінок групи з кожного предмета. Теж саме можна сказати і про матрицю. Кожний елемент матриці стоїть в певному рядку і одночасно в певному стовпці. Номера рядка та стовпця однозначно визначають його місце в матриці і є його індексами. Так само і в двовимірних масивах даних в ТП.
Для оголошення двовимірного масиву можна використати вже знайому конструкцію, що використовувалась для одновимірних масивів в попередньому параграфі:
TYPE AMATR = ARRAY [T1] OF ARRAY[T2] OF <тип елементів>;
Тут після першого службового слова OF , як належить, наведено тип елементів, а саме – масив, тобто мова йде про масив , елементами якого є масиви. T1 і T2 в цій конструкції визначають типи індексів, які можуть бути перелічуваними або обмеженими , як і раніше. Краще спочатку визначити деякий тип одновимірного масиву, який потім використовується як базовий тип в оголошенні двовимірного масиву. Так для прикладу з результатами сесії можна зробити такі оголошення:
TYPE EXAMS = ARRAY[1..4] OF INTEGER ;
VAR SESIA : ARRAY[1..30] OF EXAMS ;
тобто змінна SESIA є 30-елементним масивом, кожний елемент котрого, в свою чергу, є рядом із 4-х цілих чисел. Або другий варіант оголошення:
TYPE GREXAMS = ARRAY[1..30] OF INTEGER;
VAR SESIA : ARRAY[1..4] OF GREXAMS;
Тут вже змінна SESIA є масивом із 4-х елементів, кожний з котрих є масивом із 30 цілих чисел.
Оголошення двовимірного масиву можна зробити ще і в такому форматі:
TYPE <ім’я > = ARRAY[<діапазон1, діапазон2>] OF <тип елементів > ;
Для наведеного прикладу таке оголошення матиме вигляд:
TYPE SESIA = ARRAY[1..30,1..4] OF INTEGER ;
Оголошувати двовимірні масиви можна і в блоці VAR:
VAR SESIA : ARRAY[1..30,1..4] OF INTEGER ;
Для двовимірних масивів зберігається можливість використання змінної верхньої індексної межі з допомогою оголошення відповідної константи, як у одновимірних. В програмах , що використовують двовимірні масиви , для введення, виведення та обробки даних слід застосовувати оператор циклу з параметром. Всі такі програми матимуть конструкцію типу “цикл у циклі” з відповідним вкладенням операторів циклу. В залежності від того, як здійснюється обробка : по рядках чи по стовпцях, визначаються параметри зовнішнього і вкладеного операторів циклу.
Приклад. За результатами сесії визначити середній бал кожного студента, середній бал групи з кожного предмета та загальний середній бал групи в сесію.
PROGRAM BAL ;
CONST N = 30 ;
VAR
I,J : INTEGER ;
PRIZV :ARRAY[1..N] OF STRING[20] ; { Список групи }
SESIA : ARRAY[1..N,1..4] OF INTEGER ; { Відомість оцінок }
SRST : ARRAY[1..N] OF REAL ; { Середній бал студента }
SRPR :ARRAY[1..4] OF REAL ; { Середній бал з предмета }
SRGR :REAL ;{ Середній бал групи за результатами сесії }
SST, SPR, SGR : INTEGER ;
BEGIN
FOR I := 1 TO N DO
BEGIN WRITE ( I ) ; READ ( PRIZV[I]) ;
FOR J :=1 TO 4 DO READ ( SESIA[I,J]) ;
WRITELN
END ; { Введення масиву оцінок }
WRITELN ( ‘ СЕРЕДНІЙ БАЛ СТУДЕНТА ‘ ) ;
FOR I := 1 TO N DO
BEGIN SST := 0 ;
FOR J:=1 TO 4 DO SST:= SST + SESIA[I,J] ;
SRST[I] := SST/4 ;
WRITELN ( I , ‘ ‘, PRIZV[I] : 20 , ‘ ‘ , SRST[I] : 5 : 2 )
END ; { Обробка по рядках }
FOR J := 1 TO 4 DO
BEGIN SPR := 0 ;
WRITE ( ‘ СЕРЕДНІЙ БАЛ З ‘, J,’-го ПРЕДМЕТУ ‘ ) ;
FOR I:= 1 TO N DO SPR := SPR + SESIA[I,J] ;
SRPR[J] := SPR/N ; WRITELN (SRPR[J] : 5 : 2 )
END ; { Обробка по стовпцях }
SGR := 0;
FOR I :=1 TO N DO
FOR J := 1 TO 4 DO SGR := SGR + SESIA[I,J] ;
SRGR :=SGR/(N*4) ;
WRITELN ( ‘ СЕРЕДНІЙ БАЛ ГРУПИ =‘ , SRGR : 5 : 2 )
END .
Коментар в програмі наводиться наприкінці відповідного фрагмента.
Треба зазначити , що кількість вимірів масивів формально не обмежена, тобто можливі тривимірні, чотиривимірні і т.д. масиви. Однак сума розмірів всіх компонентів масиву повинна не перебільшувати 64K.