Язык:
Русский
English
array (зарезервированное слово)
Определяет массив.
Синтаксис
array [тип_индексов] of тип_элементов
Замечания
Позволяются несколько типов индексов, если они разделены запятыми.
Элементы массива могут иметь любой тип, а тип индексов должен быть порядковым.
Пример
type IntList = аrray[1 .. 100] оf Integer;
CharData = аrray['A' .. 'Z'] оf Byte;
Matrix = аrray[0 .. 9, 0 .. 9] оf Real;
Ада
type Int_List is array (1 .. 100) of Integer;
type Char_Date is array (Character range 'A' .. 'Z') of Unsigned_8;
type Matrix is array (0 .. 9, 0 .. 9) of Float;
Кроме того, что уже позволяет Borland Pascal, язык Ада позволяет:
■ Использовать в качестве границ массива не только
постоянные выражения. Например, при решении на языке Ада
олимпиадных задач можно сначала считать из файла размеры
матрицы, а затем в процедуре Solve определить локальную
переменную с размерами, считанными из файла. В Borland Pascal
программистам приходилось обьявлять массивы и матрицы с
запасом.
■ Недоопределить тип массива. Например, таковы линейные строки:
type String is array (Positive range <>) of Character;
Если говорить не об олимпиадных задачах, а о том, что
встречается в жизни, то один раз узнать размер и много раз его
использовать не получается. В программе, работающей с матрицами,
матрицы могут иметь самые разные размеры.
К сожалению, Ада остаётся уникальным языком программирования, в котором можно определить прямоугольную матрицу с недоопределёнными размерами. В других языках такая матрица на поверку оказывается массивом указателей на массив. Доступ к данным в такой структуре на порядки медленне, чем в языке Ада. Также к сожалению, только в компиляторах языка Ада применяется так называемый второй стек. Второй стек необходим для возврата из функции результата с недоопределённым размером. Вызывающий не может выделить место под результат, потому что не знает, сколько памяти для этого потребуется. Вызываемый не может использовать основной стек, поскольку он в момент возврата результата уже занят локальными переменными функции. Локальные переменные создаются прежде, чем создаётся результат, и уничтожаются прежде, чем результат. Устройство стека не позволяет это сделать. Второй стек - это элегантное и эффективное решение проблемы. Люди, не знакомые с языком Ада, не видят иного выхода, кроме как использовать кучу или сборщик мусора.