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

Обновлено: 12.04.2026

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

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

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

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

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

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

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

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

Размер массива — это количество содержащихся в нем значений. В случае матрицы оно определяется произведением количества строк на количество столбцов. Так если в массиве 3 строки и 5 столбцов (размерность, то есть форма, 3 на 5), то в него поместятся 15 значений. Однако если функции length передать переменную-матрицу, то она посчитает только количество ее строк. Это связано с тем, что двумерный массив рассматривается как массив, состоящий из одномерных массивов. Функция length не оценивает, из сложных ли элементов состоит внешний массив. Она просто подсчитывает количество элементов "структуры верхнего уровня".

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

Создайте квадратную матрицу 3 на 3. Заполните ее без цикла следующим образом. Верхнюю строку — значениями, "жестко" заданными в программном коде, среднюю строку — случайными числами, нижнюю — значениями, вводимыми с клавиатуры. Выведите на экран числа главной диагонали (идет из левого верхнего в правый нижний угол) этой матрицы.

Понятно, что когда работают со всеми элементами матрицы, то используется цикл, как и в случаях с одномерными массивами. Однако с матрицами используются два цикла, один вложен в другой. Может быть наоборот: во внешнем перебираются столбцы, во внутреннем — ячейки столбца (проход по строкам). Соответственно, необходима пара переменных-индексов и одновременно счетчиков циклов. Обычно используют i и j. Чаще во внешнем перебирают строки, во внутреннем — ячейки текущей строки (их столько, сколько столбцов, поэтому можно сказать, что перебираются столбцы).

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

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

begin
    randomize;    
    for i := 1 to 3 do
        for j := 1 to 5 do
            matrix[i,j] := random(50);

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

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

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

  33  35  40  19   1
  23  39  47  40  12
  48  12   4  45  22

Измените приведенную выше программу так, чтобы для определения верхних индексов двумерной матрицы использовались константы, а ее заполнение и вывод значений на экран происходили в одном цикле (паре внешнего и вложенного циклов).

Задания для дополнительной или самостоятельной работы:

  1. Заполните матрицу числами, вводимыми с клавиатуры. Выведите на экран суммы значений каждой отдельной строки матрицы.
  2. В цикле заполните одномерный массив из 12 элементов случайными числами. На его основе сформируйте матрицу 4x3, то есть первые четыре числа исходного массива должны заполнить первую строку матрицы, следующие четыре — вторую и т.д.