Статус документа
Статус документа

ГОСТ 27831-88 (ИСО 8652-87) Язык программирования АДА

     3.6. Индексируемые типы


Объект индексируемого типа (массив) - это составной объект, содержащий компоненты одного и того же подтипа. В имени компонента массива используется одно или несколько индексных значений, принадлежащих заданным дискретным типам. Значение массива - это составное значение, состоящее из значений его компонентов.

определение_индексируемого_типа : : =

определение_неограниченного_индексируемого_типа

определение_ограниченного__индексируемого_типа

определение_неограниченного_индексируемого_типа : : =

array (определение_подтипа_индекса

{, определение_подтипа_индекса}) of

указание_подтипа_компонента

определение_ограниченного_индексируемого_типа : : =

array ограничение_индекса of

указание_подтипа_компонента

определение_подтипа_индекса : : =

обозначение_типа range <>

ограничение_индекса : : =

(дискретный_диапазон {, дискретный_диапазон})

дискретный_диапазон : : =

указание_дискретного_подтипа диапазон


Массив характеризуется числом индексов (размерность массива), типом и позицией каждого индекса, верхней и нижней границами каждого индекса, а также типом и возможным ограничением компонентов. Порядок индексов существенен.

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

Определение неограниченного индексируемого типа определяет индексируемый тип. Для каждого объекта индексируемого типа число индексов, тип и позиция каждого индекса, а также подтип компонентов, будут такими, как в определении типа; значения нижней и верхней границ для каждого индекса принадлежат соответствующему подтипу индекса, кроме пустых массивов, как пояснено в разд.3.6.1. Подтипом индекса для данной позиции индекса по определению является подтип, указанный обозначением типа соответствующего определения подтипа индекса. Составной ограничитель <> (бокс) в определении подтипа индекса помещается для неопределенного диапазона (различные объекты данного типа не обязательно имеют одни и те же границы). Предвыполнение определения неограниченного индексируемого типа создает индексируемый тип: оно включает предвыполнение указания подтипа компонентов.

Определение ограниченного индексируемого типа определяет индексируемый тип и подтип этого типа:

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

Индексируемый подтип - это подтип, полученный наложением ограничения индекса на индексируемый тип.

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

Предвыполнение определения ограниченного индексируемого типа создает соответствующий индексируемый тип и индексируемый подтип. При этом предвыполняются ограничение индекса и указание подтипа компонентов. Вычисление каждого дискретного диапазона ограничения индекса и предвыполнение указания подтипа компонентов осуществляется в порядке, не определяемом языком.

Примеры описаний типа с определениями неограниченного индексируемого типа:

type ВЕКТОР is array (INTEGER range <>) of ВЕЩЕСТВ;

type МАТРИЦА is array (INTEGER range <>, INTEGER range <>) of ВЕЩЕСТВ;

type ВЕКТОР БИТ is array (INTEGER range <>) of BOOLEAN;

type РИМСКИЙ is array (POSITIVE range <>) of РИМСКАЯ_ЦИФРА;

Примеры описаний типа с определениями ограниченного индексируемого типа:

type ТАБЛИЦА is array (1..10) of INTEGER;

type РАСПИСАНИЕ is array (ДЕНЬ) of BOOLEAN;

type СТРОЧКА is array (1..МАКС_РАЗМЕР_СТРОЧКИ) of CHARACTER;

Примеры описаний объектов с определениями ограниченного индексируемого типа:

РЕШЕТКА: array (1..80, 1..100) of BOOLEAN;

СМЕСЬ: array (ЦВЕТ range КРАСНЫЙ..ЗЕЛЕНЫЙ) of BOOLEAN;

СТРАНИЦА: array (1..50) of СТРОЧКА; - - массив массивов.

Примечание. Для одномерного массива приведенное правило означает, что описание с определением ограниченного индексируемого типа, например:

type T is array (POSITIVE range МИН..МАКС)

of КОМПОНЕНТОВ;