6.1. Массив
Тип-массив представляет собой фиксированное количество упорядоченных однотипных
компонент, снабженных индексами. Он может быть одномерным и многомерным. Чтобы задать тип-массив, используется зарезервированное слово array, после которого следует указать тип индекса (индексов) компонент (в квадратных скобках) и далее после слова of - тип самих компонент:
type
<имя типа> = array[<тип индекса(индексов)>] of <тип компонент>;
Пример.
type
Arr = array[1..3] of Real; {тип—массив из 3 вещественных чисел}
Matrix = array[1..3, 1..2] of Integer; {тип - двумерный массив целых чисел, состоящий
из 3 строк и 2 столбцов}
Введя тип-массив, можно затем задать переменные или типизированные константы этого типа. Размерность массива может быть любой, компоненты массива могут быть любого, в том числе и структурированного, типа, индекс (индексы) может быть любого порядкового типа, кроме типа Longint.
При задании значений константе-массиву компоненты указываются в круглых скобках и
разделяются запятыми, причем, если массив многомерный, внешние круглые скобки
соответствуют левому индексу, вложенные в них круглые скобки - следующему индексу
и т. д. Так, для введенных выше типов можно задать, например, следующие переменные и константы:
var
Ml, М2: Arr;
Matr: Matrix;
const
M3: Arr =(1, 2, 3);
Mat: Matrix = ((1, 2), (3, 4), (5, 6));
Последняя константа соответствует следующей структуре:
1 2
3 4
5 6
Примечание.
Тип-массив можно вводить непосредственно и при определении соответствующих переменных или типизированных констант.
Например:
var
Ml, M2: array [1..3] of Real;
Matr: array[1..3, 1..2] of Integer;
Здесь определены те же массивы, что и в предыдущем примере.
При таком объявлении массивов следует помнить, что их типы не будут идентичными никаким другим типам, даже если они имеют одинаковую структуру. Поэтому передавать их как параметры в подпрограмму нельзя (см. п. 10.3), нельзя также присваивать им значения других массивов (и наоборот), даже если их структуры совпадают.
Доступ к компонентам массива осуществляется указанием имени массива, за которым в
квадратных скобках помещается значение индекса (индексов) компоненты. В общем случае каждый индекс компоненты может быть задан выражением соответствующего типа, например:
M1[2], Matrix[X, Y], M2[Succ(I)] и т. д.
Одному массиву можно присвоить значение другого массива, но только идентичного типа. Так, если заданы следующие массивы:
var А, В: array[l..5] of Integer;
С: array [1. .5] of Integer;
то допустим следующий оператор:
A := В;
С другой стороны, оператор
С := А;
недопустим, т. к. массивы А и С - не идентичных типов.
Имеются некоторые отличия в работе с одномерными массивами символов (не путать с
величинами типа string - см. п. 6.2). Так, типизированным константам этого вида можно присвоить значение как обычным строковым константам, указав строку символов в апострофах, например
const
A: array[1..5] of Char='ааааа';
В: array[1..3] of Char='bbb';
Для таких массивов, как и для строк, можно использовать операции сравнения (даже если
они не идентичных типов и даже если имеют различный размер) и конкатенации (объединения) - см. п. 6.2. Их можно использовать в операторах вывода Write и WriteLn. Например,
для введенных выше массивов можно написать
if A > В then
WriteLn(A) else
WriteLn(B);