Раздел 6.5 - Массивы

Тип `массив' в Ada может содержать множество элементов одного и того же подтипа. Массив в Ada очень похож на массивы во многих других языках, но имеются некоторые важные особенности, о которых необходимо знать.

  1. Индексы массивов в Аде не обязательно начинаются с нуля или единицы. Индексы массивов могут начинаться (и заканчиваться) любым целым значением, которое по смыслу наиболее подходит для данных. Это значит, что можно начать массив с -5 (если это имеет смысл), а также использовать перечисляемые типы в качестве индексов. Обычно, если нет естественной точки отсчета, в программах на Ada в качестве начального индекса используют 1. Это уменьшает вероятность так называемых ошибок "потери единицы" (``one-off'' errors ), так как люди обычно начинают считать с единицы, и испытывают неудобство, когда приходится начинать счет с нуля.
  2. Как и многое другое в Ada, обращение к массивам (как чтение так и запись) обычно проверяется во время исполнения. То есть, если индекс выходит за границы массива, то вместо "безропотного" выполнения будет возбуждено исключение. Это предотвращает невероятно большое количество ошибок.
  3. Многомерные массивы реализуются обычным образом.
  4. Существует директива, с помощью которой можно упаковать массивы. Она указывает компилятору на необходимость эффективного использования памяти при хранении массивов. Этот способ особенно удобен для хранения массивов с элементами типа Boolean и Character.
  5. Обращение к элементу массива умышленно сделано похожим на вызов функции. Таким образом, если вы замените обращение к массиву на вызов функции, то код, использующий элементы массива, скорее всего, потребует относительно небольших изменений.
  6. Можно определить массив без точного указания его минимального и максимального размера. Такие массивы называются 'неограниченными'. Они очень полезны, поэтому мы обсудим их дальше.

Ниже приведено несколько примеров:

 -- Примеры описания типов массивов:
  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));


К этому разделу упражнение отсутствует.

Вы можете перейти к следующему разделу.


Вы можете также:

PREVIOUS Вернуться к предыдущему разделу

OUTLINE  Вернуться к содержанию Урока 6

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s6s5.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org