Описание типа «массив»

С понятием «массив» приходится сталкиваться при решении научно-технических и экономических задач обработки совокупностей большого количества значений. В общем случае массив – это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Название регулярный тип (или ряд) массивы получили за то, что они объединяют однотипные (логически однородные) элементы, упорядоченные по индексам, определяющим положение каждого элемента в массиве.

В качестве элементов массива можно использовать любой другой ранее описанный тип, поэтому вполне правомерно существование массивов записей, массивов указателей, массивов строк, массивов массивов и т. д. Элементами массива могут быть данные любого типа, включая структурированные. Тип элементов массива называется базовым. Особенностью языка Pascal является то, что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.

Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого скалярного типа, кроме вещественного. Тип индекса определяет границы изменения значений индекса. Для описания массива предназначено словосочетание array of (массив из).
Исходя из синтаксической диаграммы, формат записи будет таким:
type
<имя типа> = аrrау[тип индекса] of <тип компонента>;
var
<идентификатор > : <имя типа>;

Массив может быть описан и без представления типа в разделе описания типов данных:

var
<идентификатор > : аrrау[тип индекса] of <тип компонентам

Пример:

type
Klass = (К1. К2, КЗ. К4);
Znak = array[l..255] of char;
var
Ml: Znak; {Тип Znak предварительно описан в разделе типов}
М2: array[1..6O] of integer; {Пряное описание массива М2}
МЗ: аггау[1..4] of Klass;
Mas: аггау[1..4] of integer;

Если в качестве базового тина взят другой массив, то образуется структура, которую принято называть многомерным массивом.

Пример:

type
Vector = array[1..4] of integer;
Massiv = array[1..4] of Vector;
var
Matr : Massiv;

Ту же структуру можно получить, используя другую форму записи:

var
Matr : array[l..4.1..4] of integer;

Если при такой форме описания массива задан один индекс, массив называется одномерным, если два индекса – двумерным, если n индексов – n-мерным. Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный – понятию прямоугольной таблицы (матрицы, набора векторов).

Размерность ограничена только объемом памяти конкретного компьютера. Одномерные массивы обычно используются для представления векторов, а двумерные – для представления матриц.

Пример:

var
VectorZ: аrrау[1..40] of real; {Одномерный массив из 40 элементов}
MatrU : аrrау[1..8,1..8] of byte: {Двумерный массив 8×8 элементов}
Triif : array[l..4,1..5,1..8] of integer; {Трехмерный массив}

Для описания массива можно использовать предварительно определенные константы:

const
G1 = 4;
G2 = 6;
var
MasY : array[l..Gl,l…G2] of real;

Элементы массива располагаются в памяти последовательно. Элементы с меньшими значениями индекса хранятся в младших адресах памяти. Многомерные массивы располагаются таким образом, что самый правый индекс возрастает первым.

Например, если имеется массив A:array[1..5,1..5] of integer; то в памяти элементы массива будут размещены по возрастанию адресов:

А[1,1]
А[1.2]
А[1,5]
А[2,1]
А[2,2]
А[5,5]

Контроль правильности значений индексов массива может проводиться с помощью директивы компилятора R. По умолчанию директива R находится в пассивном состоянии {$R-}. Перевод в активное состояние вызывает проверку всех индексных выражений на соответствие их значений диапазону типа индекса.

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

Добавить комментарий