Введение в программирование - Учебное пособие (Корочкин А. В.)

2.3 составные типы

2.3.1 Массивы

Массив в Аде рассматривается как составной объект, содержащий компоненты (элементы массива) одного и того же типа. Доступ к эле­ментам массива выполняется с помощью индексов.

Различают ограниченные и неограниченные массивы. Для ограничен­ных массивов границы определяются во время описания объекта или во время описания индексируемого типа. Для неограниченных массивов границы не определяются во время описания. Это делается позже:

•   при описании типов, использующих неограниченный индексируе­мый тип;

•   при описании объектов;

•   во время передачи параметров.

Неограниченные массивы позволяют передавать в подпрограм­мы фактические параметры в виде массивов различной длины.

Описание ограниченных массивов:

TYPE      Имя_Типа_Массива     IS    ARRAY

(Дискретный_Диапазон)  OF

Подтип_Компонентов_Массива;

4  — Корочкин А. В.

22

23

Глава 2. Типы

Ада 95. Введение в программирование

 

 

Массив пуст, если хотя бы один из индексов определяется пустым диапазоном. П Пример:

type   Stack     is   array  (1 .. 99)         of    Element; type   Set         is   array  (Color )       of    integer;

of            float;

Of           float;

of            Vector;

IS    ARRAY    (T  RANGE o)

Подтип_Компонентов_Массива;

Здесь   Т - имя типа или подтипа; о - бокс, который обозначает, что границы неопределены и будут указаны позже.

(integer   range <>)  of   float;

(integer   range <>,

integer    range <> ) of  float;

Определение  объектов,  использующих  неограниченный  тип  Vec-tor_NN и Matrix _54, происходит с указанием границ диапазона:

type        Vector    is             array  (1 .. 100)

type        Matrix    is             array ( 1 .. 15, 1 .. 10 )

type        Matrix_New         is   array ( 1 .. 15)

Описание неограниченных массивов: TYPE

Имя_ Типа_Массива OF

type   Vector_NN    is   array type    Matrix _54    is   array

Отрезки позволяют оперировать с группой элементов массива как с единым объектом, упрощая написание программы. Например, отрезок Х( 3 . . 7 ) указывает пять последовательных элементов массива X, при этом копирование этих элементов не производится:

14);

( I + 1) * 4 ) ;

При использовании механизма отрезков для двухмерных массивов их следует описывать в виде "вектор векторов", после чего для них можно создавать и использовать отрезки, как для типа Matrix_New, описанно­го выше. Обращение к элементам массива А типа Matrix_New выполня­ется в форме, отличной от обращения к обычному двумерному массиву:

Х(3 .. 7) : = Z( 10 Order : = Astra ( I * 4

A(i)(j)     :=   3.14159; А( 1  .. 5)   : =  Тео;

Агрегат массива - это значения массива, которые конструируются непосредственно из значений компонент. Используются для присваи­вания значений массивам.

Тип агрегата задаётся путем указания типа или подтипа: Т 'агрегат

Если тип не задан явно, то он определяется из контекста.

П Пример:

5,    others => 0 );

(1  .. 25 =>  4.557);   Vector ( 1 | 23 = Z: = (1 |7.. 10=> 4.2,     9=>3.14);

 

X

z,   s

Pool

Vector_NN (1 .. 10); Vector_NN   (-99 .. 99); Matrix _54 ( 1 .. 10, 1 .. N);

СОВЕТЫ:

*  Избегайте анонимных типов при описании массивов; Элементы массива, отрезки и агрегаты

Отрезок одномерного массива М задаётся в виде:

М (Дискретный_Диапазон)

Ш СОВЕТЫ:

•  Используйте агрегаты только для случаев работы с обычным по-

рядком   аргументов. >  Используйте только простые агрегаты.

•  Отдавайте предпочтение отрезкам при работе с частями массивов вместо циклов.

Атрибуты массивов

Для объектов индексируемого типа или ограниченного индексируе­мого подтипа М (массива) определены следующие атрибуты:

•   M'FIRST           Нижняя граница первого индекса; тоже самое, что и M'FIRST(N)

•    M'FIRST(N)      Нижняя граница N-го индекса

•   M'LAST            Верхняя граница первого индекса; тоже самое,

24

25

Ада 95. Введение в программирование

Глава 2. Типы

 

что и M'LAST(N)

•    M'LAST(N)       Верхняя граница N-ro индекса

•    M'LENGTH       Число элементов первого измерения

•    M'LENGTH(N) Число элементов N-ro измерения

•   M'RANGE        Подтип M'FIRST .. M'LAST, соответствующий правильным значениями для первого индекса

•   M'RANGE(N)    Подтип M'FIRST.M'LAST, соответствующий правильным значениям N-ro индекса

2.3.2 Записи

Запись - составной объект, компоненты которого имеют имена и мо­гут иметь различный тип. Описание типа записи должно иметь сле­дующую форму:

TYPE

IS

Имя_3ашси

RECORD

Имя_Компоненты_1: Тип_Компоненты_1; Имя_Компоненты_1: Тип_Компоненты_1;

Имя_Компоненты_1: Тип_Компоненты_1; END    RECORD;

Тип записи может содержать любое число компонентов. П Пример описания типа записи:

type    Data   is record

V:  Vector; M : Matrix; end  record;

type   Complex_Numbers is record X:   float; Y:   float; end   record;

- - дискриминант в записи

is

type   Massiv (N, M : Positive) record

V   :   array (1 .. N ) of     integer;

W  :   array (1 .. N, 1 .. M ) of   integer; end record ;

Object:   Massiv (5, 10 );

К объектам типа запись можно обращаться как к единому целому, а также можно обращаться к каждой компоненте записи отдельно:

Data;

А, В

Z2, Sqr   :   Complex_Numbers;

Z2.X :=    1.23; Sqr    :=     Z2;

 

Z2.Y   : = A.V   : =

 

- 0.23 ; B.V;

 

iUJ        СОВЕТЫ:

*   Используйте записи с дискриминантом вместо массивов с уточняе­мыми  границами;

*   Используйте записи для обьединения разнородных ( гетерогенных) связанных данных;

*  Для больших и сложных записей используйте разбиение их на бо­лее простые подзаписи;