Массивы
Диапазоны (интервалы)
Перечисления
Конструирование типов
В этом разделе рассматривается пока лишь конструирование простых типов и массивов.
Этот тип задается упорядоченным перечислением его возможных значений. Значения этого типа – это имена констант, входящих в перечисление. Считается, что константы упорядочены по возрастанию в порядке их перечисления. Имена констант должны быть уникальными в программе (в пределах области видимости).
<перечисление>::= "(" <имя> { "," <имя> ')'.
Пример: (Su, Mo, Tu, We, Th, Fr, Sa)
Этот тип задается как непрерывное подмножество (диапазон, интервал) значений некоторого другого ординального типа, называемого базовым типомдиапазонного типа. Для задания диапазона указываются его начальное и конечное значения (включительно) в множестве значений базового типа.
<диапазон>::= <начальное значение> ".." <конечное значение>.
Здесь начальное и конечное значения – допустимые значения базового типа, причем, конечное значение старше (больше) начального.
Примеры:
0..5 – диапазон на целом типе. Значения 0, 1, 2, 3, 4, 5.
'A'..'Z' – диапазон на типе Char. Значения – большие буквы латинского алфавита.
Mo..Fr – диапазон на типе перечисления, описанном в примере предыдущего пункта.
Массивы относятся к сложным типам данных.
Массив – это упорядоченная последовательность значений одного и того же базового типа. Базовым типом массива может быть любой тип, кроме файлового.
<массив>::= "Array" "[" <тип индекса> "]" "of" <базовый тип>.
Индекс – это порядковый номер элемента массива. Тип индекса определяет множество возможных значений индекса и количество элементов массива. Тип индекса может быть любым ординальным типом.
Примеры:
Array [1..20] of Real – массив, содержащий 20 элементов типа Real;
array [-10..50] of char – массив из 61 элемента символьного типа;
Array [Mo..Fr] of Boolean – массив, тип индекса которого задан на основе перечисления, описанного ранее. Он содержит 5 элементов булевского типа.
Поскольку базовым типом массива может быть любой тип, кроме файлового, в частности, массив может состоять из массивов. Пример:
Array [1..5] of array ['A'..'D'] of array [Boolean] of Real
Этот массив содержит 5´4´2 = 40 элементов вещественного типа.
Массивы, подобные описанному в последнем примере, называются многомерными. Для удобства описания таких массивов в Паскале предусмотрено сокращенное описание:
<массив>::= "Array" "[" <тип индекса> {"," <тип индекса> }"]" "of" <базовый тип>.
С помощью такого синтаксиса, последний пример может быть записан таким образом:
Array [1..5, 'A'..'D', Boolean] of Real