Двумерные массивы — матрицы в Pascal

Обновлено: 14.03.2026

Одномерный массив можно представить как линейную структуру, в которой элементы следуют друг за другом. Однако бывают более сложные структуры данных. Например, двумерные массивы, которые можно описать как таблицу, в ячейках которой располагаются значения. Для обращения к данным массива указываются номера их строк и столбцов. Часто табличные массивы называют матрицами.

Представление матрицы в памяти компьютера

Обычно двумерные массивы на языке программирования Pascal описываются так:

array[1..M, 1..N] of базовый_тип

Однако можно их описывать как массив массивов:

array[1..M] of array[1..N] of базовый_тип

В таких описаниях подразумевается, что в интервале от 1 до M определяется количество строк, а в интервале от 1 до N — количество столбцов матрицы. Рассмотрим примеры.

Описание массива через раздел type:

const
    M = 10;
    N = 5;
type
    matrix = array[1..M, 1..N] of integer;
var
    a: matrix;

Описание матрицы в разделе переменных:

const
    M = 10;
    N = 5;
var
    a: array[1..M, 1..N] of integer;

Двумерный массив, описанный так, что базовым выступает одномерный, определенный как пользовательский тип:

type 
    a = array[1..10] of byte;
var 
    b: array[1..100] of a;

Для обращения к элементу двухмерного массива после его имени в квадратных скобках через запятую указываются значения двух индексов. Первый обозначает номер строки, а второй — номер столбца. На их пересечении находится одна из ячеек матрицы. Например, выражение a[3,2] := 16 означает, что во второй ячейке третьей строки хранится значение 16. В языке программирования Pascal допустимо разделение индексов с помощью квадратных скобок, например a[1][5] := 27.

Если описывается двумерный массив как типизированная константа, то при задании значений его элементов он рассматривается как массив массивов. При этом в общих круглых скобках через запятую перечисляются заключенные в круглые скобки значения элементов строк (каждая строка в своих скобках):

type
    arr = array[1..4, 1..3] of integer;
const
    cords: arr = ((1,-1,3), (0,0,0), (1,4,0), (4,-1,-1));

Размерность массива — это количество содержащихся в нем значений. Оно определяется произведением количества строк на количество столбцов. Так если в массиве 3 строки и 5 столбцов, то в него поместится 15 значений.

Рассмотрим простой пример работы с двумерным массивом. Сначала заполним его данными, а затем выведем их на экран в виде таблицы.

var
    matrix: array[1..3,1..5] of integer;
    i, j: integer;

begin
    writeln('Введите 15 чисел.');

    for i := 1 to 3 do
        for j := 1 to 5 do
            read(matrix[i,j]);

    for i := 1 to 3 do begin
        for j := 1 to 5 do
            write(matrix[i,j]:5);
        writeln
    end;

end.

Когда пользователь вводит очередное число, то процедура read считывает его и помещает в ячейку с текущими индексами i и j. Когда i равна единице, значение j меняется пять раз, и, значит, заполняется первая строка таблицы. Когда i равна двум, значение j снова меняется пять раз и заполняется вторая строка таблицы. Аналогично заполняется третья строка таблицы. Внутренний цикл for в общей сложности совершает 15 итераций, внешний только 3.

Как пользователь вводит значения — не важно. Он может их разделять либо пробелом, либо переходом на новую строку. Вывод же значений двумерного массива организован в виде таблицы. Выводятся 3 строки по 5 чисел в каждой. Внутри строк под каждое значение отводится 5 знакомест, в результате таблица получается с выровненными столбцами.

Введите 15 чисел.
3 4 5 12 90 12 24 1 0 0 89 2 75 34 100
    3    4    5   12   90
   12   24    1    0    0
   89    2   75   34  100