Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин. Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке ПАСКАЛЬ, кроме файлового типа. Тип компонент называется базовым типом.
Вся совокупность компонент определяется одним именем. Для обозначения отдельных компонент используется конструкция, называемая переменной с индексом или с индексами:
A[5] S[k+1] B[3,5].
В качестве индекса может быть использовано выражение. Тип индексов может быть только интервальным или перечисляемым. Действительный и целый типы недопустимы. Индексы интервального типа, для которого базовым является целый тип, могут принимать отрицательные, нулевое и положительные значения.
Массивы описываются следующим образом:
Имя типа = ARRAY [ диапазоны индексов ] OF тип элемента массива;
В качестве типа для элементов массива можно использовать любые типы Турбо Паскаля кроме файловых. Диапазоны индексов представляют собой один или несколько диапазонов, перечисленные через запятую. В качестве диапазонов индексов нельзя использовать диапазоны с базовым типом Longint.
В операторной части программы один массив может быть присвоен другому, если их типы идентичны, например:
R1:=Z.
Для ввода или вывода массива в список ввода или вывода помещается переменная с индексом, а операторы ввода или вывода выполняются в цикле.
Двумерные массивы хранятся в памяти ЭВМ по строкам. Первый индекс определяет номер строки, второй - номер столбца.
Инициализация массивов (присвоение начальных значений всем компонентам массивов) осуществляется двумя способами.
Первый способ - с использованием типизированных констант, например:
При инициализации двумерных массивов значения компонент каждого из входящих в него одномерных массивов записывается в скобках:
type Dim3x2= Array[1..3,1..2] of Integer;
const
iaM3x2: Dim3x2= ( (1, 2)
(3, 4)
(5, 6) );
Второй способ инициализации - использование разновидности процедуры FillChar:
FillChar( var V; NBytes: Word; B: Byte );
Эта процедура заполняет участок памяти однобайтовым значением. Например, для обнуления массива A[1..10] of Real можно записать:
FillChar(A, 40, 0);
или
FillChar(A, SizeOf(A), 0);
ПРИМЕР: Три способа описания одного и того же типа массива:
type {1} M1 = array [0..5] of integer;
M2 = array [char] of M1;
M3 = array [-2..2] of M2;
{2} M3 = array [-2..2] of array [char] of array [0..5] of integer;
{3} M3 = array [-2..2,char,0..5] of integer;
var A:M3;
{Обращаться к элементам массива можно следующим образом:}
Begin
read(A[-1,'a',3]);
read(A[1]['x'][0]);
A[1]['c',1]:=100;
end.
Глубина вложенности, т.е. количество индексов, при определении массивов не ограничена. Играет роль только суммарный объем данных в программе. В стандартном режиме работы Турбо Паскаля этот объем ограничен размерами сегмента, т.е. 64 килобайта. Целиком над массивами допускается применение только операции присваивания массивов (подмассивов) одинаковых типов. Остальные операции должны выполняться поэлементно.