Раздел 6.5 - Массивы
Тип `массив' в Ada может содержать множество элементов одного и
того же подтипа. Массив в Ada очень похож на массивы во многих
других языках, но имеются некоторые важные особенности, о которых
необходимо знать.
-
Индексы массивов в Аде не обязательно начинаются с нуля или единицы.
Индексы массивов могут начинаться (и заканчиваться) любым целым
значением, которое по смыслу наиболее подходит для данных. Это значит,
что можно начать массив с -5 (если это имеет смысл), а также
использовать перечисляемые типы в качестве индексов. Обычно, если нет
естественной точки отсчета, в программах на Ada в качестве начального
индекса используют 1. Это уменьшает вероятность так называемых
ошибок "потери единицы" (``one-off'' errors ), так как люди обычно начинают
считать с единицы, и испытывают неудобство, когда приходится начинать
счет с нуля.
-
Как и многое другое в Ada, обращение к массивам (как чтение так и
запись) обычно проверяется во время исполнения. То есть, если индекс
выходит за границы массива, то вместо "безропотного" выполнения будет возбуждено
исключение. Это предотвращает невероятно большое количество ошибок.
-
Многомерные массивы реализуются обычным образом.
-
Существует директива, с помощью которой можно упаковать массивы.
Она указывает компилятору на необходимость эффективного
использования памяти при хранении массивов. Этот
способ особенно удобен для хранения массивов с элементами типа Boolean и
Character.
-
Обращение к элементу массива умышленно сделано похожим на
вызов функции. Таким образом, если вы замените обращение к массиву
на вызов функции, то код, использующий элементы массива,
скорее всего, потребует относительно небольших изменений.
-
Можно определить массив без точного указания его минимального и
максимального размера. Такие массивы называются 'неограниченными'.
Они очень полезны, поэтому мы обсудим их дальше.
Ниже приведено несколько примеров:
-- Примеры описания типов массивов:
type Table is array(1 .. 100) of Integer; -- 100 переменных типа Integer.
type Schedule is array(Day) of Boolean; -- Семь переменных типа Boolean, по одной для каждого дня
type Grid is array(-100 .. 100, -100 .. 100) of Float; -- 40401 переменных типа Float.
-- Примеры описания переменных:
Products_On_Hand : Table; -- переменная содержит 100 переменных типа Integer.
Work_Schedule : Schedule;
Temperature : Grid;
-- И примеры использования:
Products_On_Hand(1) := 20;
Work_Schedule(Sunday) := False;
Temperature(0,0) := 100.0;
Put(Products_On_Hand(1));
К этому разделу упражнение отсутствует.
Вы можете перейти к следующему разделу.
Вы можете также:
David A. Wheeler (dwheeler@ida.org)
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s6s5.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org