Н. Джехани - Язык Ада (1988) (1160771), страница 6
Текст из файла (страница 6)
В дополнение к нему реализация может поддерживать типы ЯНОКТ Н ОАТ и 1.ОНО Р1.ОАТ. 1.2.3.5.2. Атрибуты плавающих типов 13.5.8] Следующие атрибуты определены для любого плавающего типа Р: Значения Р'ЯКУТ и Р'ЬАБТ не обязательно модельные числа. 1.2.3.5.3. Фиксированные типы 13.5.91 Фиксированные типы определяются как зуре МЕ% Р1ХЕ1э Ь ограничение Фиксированного типа; где ограничение — Гриксированного тина — это ограничение точности, имеющее форму Вейа РЕЬ гапйе Ь..К; где ОЕЬ, Ь и К вЂ” статические выражения вещественного типа. Значение РЕ1., которое должно быть положительным, определяет максимальную абсолютную ошибку, которая может возникнуть в представлении фиксированного типа. Элементы этого фиксированного типа последовательно умножаются на ОЕЬ.
Ограничение диапазона гапйе Ь..К должно быть указано в определении фиксированного типа. Значение удовлетворяет ограничению фиксированного типа„если оно удовлетворяет любому отрезку ограничения диапазона. Приведем примеры фиксированных типов: гуре С11ККЕХСУ Ь Вейа 0.01 гапйе 0.0..1 000 000 000 000.0; Фуре Н1ОН РКЕС181ОН Ь Вейа 0.0001 гапйе 0.0..500.0; Р'Р!О1ТБ Р'Р1КБТ Р'ЬАБТ Р'ЯМАЬЬ Р'ЬАКОЕ Р'ЕРЯ1ЬОХ Точность, указываемая числом десятичных цифр Наименьшее алгебраическое значение типа Р Наибольшее алгебраическое значение типа Р Наименьшее положительное модельное число типа Р Наибольшее положительное модельное число типа Р Разность между модельным числом 1.0 и следующим ббльшим модельным числом гу Вве ение 1.2.3.5.4. Атрибуты Фиксированных типов [3.5.101 Следующие атрибуты определены для любого фиксированного типа Р: Величина ошибки, заданная в описании типа Р Наименьшее положительное модельное число типа Р Наибольшее положительное модельное число типа Р Наименьшее значение типа Р Наибольшее значение типа Р Р '))ЕЬТА Р'БМАЬЬ Р'ЬАКОЕ Р'Р)рта Р'ЬАБТ 1.2.4.
Массивы [3.6, 4.3, 4.71 Массив — это составной объект, содержащий компоненты (называемые элементами) одного и того же типа (точнее говоря, одного и того же подтипа) ). Массивы бывают двух видов — ограниченные и неограниченные. В случае ограниченного индексируемого типа границы массива определяются во время описания индексируемого типа или во время описания объекта. Ограниченные массивы похожи на массивы языка Паскаль. В случае неограниченного индексируемого типа его границы ие определяются при его описании. Они определяются позже при описании типов, использующих неограниченный индексируемый тип, при описании объектов или во время передачи параметров. Неограниченный индексируемый тип можно использовать только при определении типов или описании параметров.
При определении объектов его можно использовать, только если указаны ограничения. Существуют неограниченные индексируемые типы, позволяющие процедурам и функциям получать фактические параметры, являющиеся массивами различной длины ). 1.2.4.1. Ограниченные массивы Ограниченный индексируемый тип имеет форму аггау ограничение индекса ог С где подтип С задает тип компонент массива. С может быть любым типом, включая индексируемый или заданный тип.
Ограничение индекса определяет тип индекса и имеет форму (дискретный диапазон 1, дискретный диапазон' )) и Требование, чтобы все элементы массива были одного и того же подгнив, а не типа, ограничивает возможность появления «бешеных» массивов. Массив можно назвать «бешеным», если его компоненты имеют различные размеры, например, одномерный массив, элементы которого есть одномерные массивы различной длины. Массивы с различным числом элементов приналлежат некоторому неограниченному индексируемому типу, т.е индексируемому типу, в котором размер массива не определен.
С другой стороны, все массивы некоторого индексируемого полтина имеют одно и то же число элементов, поскольку размер массива определен в описании подтипа. и Недостатки неограниченных массивов !или подобных возможностей) привели к тому, что в языке Паскаль подпрограммы нельзя вызывать, передавая им параметры-массивы различной длины 1соотвстствуюшие таким же формальным параметрам).
Во многих языках программирования, например ПЛ/1, Алгол-68 и Си, можно в качестве параметров передавать массивы различной длины. Стандарт ИСО для языка Паскаль устраняет это ограничение )!БО81), разрешая использовать конформантные массивы. 28 ГЛВВВ 1 где дискретный диапазон — это диапазон вида Ь.Б, или имя типа, или имя подтипа, за которыми, возможно, следует ограничение вида гапйе Ь.ЛА. Выражения Ь и Ц определяющие границы дискретного диапазона, могут быть динамическими, т. е. могут зависеть от уже вычисленных результатов.
Массивы, границы которых не статические, называются динамическими массивами. Приведем примеры, иллюстрирующие ограниченный индексируемый тип: гуре ЯАЬЕЯ Ь аггау (МО)чТН) ог РЬОАТ, — МО(чТН вЂ” это перечислимый тип, определяемый пользователем гуре СНЕДАЯ ВОАК() Ь апву (1..8, 1..8) о1 СНЕББ Р1ЕСЕБ; (уре САКО Ь апву (1)чТЕОЕК галие 1..80) ог СНАКАСТЕК; — объекты типа САКО должны индексироваться — объектами типа 11чТЕОЕК или подтипа — 11чТЕОЕК, значения которых лежат между — 1 и 80 Примеры описаний объектов индексируемого типа: БЕТ: аггау (ВЛЕТ-81УЕ) о1 ВООЬЕА(ч; — динамический массив Чг'ЕЕКЬУ БАЬЕЯ: апау (1)АУ гапйе МОгч..ВАТ) ог РЬОАТ,' Массив считается пустым, если хотя бы один из индексов определяется пустым диапазоном.
Диапазон Ь.Б пустой, если Ь > 13. Пустой массив не содержит компонент. 1.2.4.2. Неограниченные массивы Неограниченный индексируемый тип имеет вид аггау (индекс (, индекс 1) ог С где подтип С определяет тип компоненты, а индекс имеет вид Т гапКе < > Т вЂ” нмя типа или подтипа. < > называется боксом и обозначает неопределенный диапазон, границы которого будут указаны позже. При описании объектов неограниченного индексируемого типа должно быть указано ограничение индекса.
Различные объекты одного и того же неограниченного индексируемого типа могут иметь различные границы. Рассмотрим, например, описания неограниченных индексируемых типов Гуре ЧЕСТОК 1з аггау (1НТЕОЕК гапйе < >) о1 Р1.ОАТ, гуре МАТК1Х Ь аггау (1(чТЕОЕК гапйе < >, 11чТЕОЕК гапйе < >) ог РЬОАТ,' Теперь приведем примеры определений объектов, использующие типы и для которых заданы подходящие ограничения индексов: Х: ЧЕСТОК (1..10); — 1..10 — это ограничение индекса У: ЧЕСТОК ( — 200..0); — Х и У вЂ” объекты одного и того же типа ЧЕСТОК, — но с разными границами М: МАТК1Х (1..25, 1..40); 29 Вве екяе Использование неограннченного нндекснруемого типа в качестве описания параметра покажем на описании процедуры БОКТ: ргоседпге БОКТ (Ч: 1п оп( ЧЕСТОК); Процедуру БОКТ можно вызвать для любого массива типа ЧЕСТОК, скажем Х, независимо от размера массива.
Границы формального параметра Ч заимствуются у фактического параметра н задаются атрибутами Ч'НКБТ н Ч'1.АБТ. 1.2.4.3. Строки [3.6.3] В языке Ада предусмотрен предопределенный тнп БТК1ХО: (уре Бтк1хО ь аггау (РОБ1т1че гапае < >) ог снАкАстек; Строки — это одномерные массивы символов. Приведем примеры строк: Гуре ЫХЕ Ь пезг БТК!ХО (1..80); — определяется новый тнп 1.1ХЕ, значения — которого строки длины 80. Тнп ЫХЕ отличен от — БТК1ХО(80); см. производные типы в гл.
2 — (дополннтельные сведения о типах) ХАМЕ: БТК1ХО(1..20); 1.: 1.1ХЕ; Над строками предопределены операции отношений =, /=, «, =, >=, >, а также операция катенацнн. В качестве примера использования строк рассмотрим подпрограмму КЕЧЕКБЕ БТК1ХО, которая выполняет реверснрованне строк типа БТК1ХО независимо от нх длины: ргосег)пге КЕЧЕКБЕ БТК1ХО (Б: 1п опг БТК1ХО) Ь вЂ” реверс строки Б, границы у Б будут такими же, — как у соответствующего фактического параметра 1.: сопя(апг 1ХТЕОЕК:= Б'Р1КБТ, (): сопя(апг 1ХТЕОЕК:= Б'ЬАБТ', — границы Б определяются с помощью атрибутов — НКБТ н ЬАБТ С: СНАКАСТЕК; Ьеа(п 1ог 1 1п Ь..(Ь+Ь))/2 1оор С:= Б(1); Б(1): = Б(() — 1+ 1); Б(() — 1+1):= С; епд 1оор; епд КЕЧЕКБЕ БТК1ХО; 1.2.4.4.
Элементы массива, отрезки и агрегаты [4.1.1, 4.1.2, 4.3, 4.3.2] Элементы и-мерного массива А с индексами )ь 1н ..., 1 обозначаются через А (1ь 1п ..., ! ). Часть одномерного массива, называемая отрезком, задается как А (дискретный диапазон) Глава 1 Например, отрезок Х(1..5) указывает первые пять элементов массива Х. При образовании отрезка копия элементов массива не создается; изменение элементов отрезка эквивалентно изменению элементов массива, соответствующих элементам вырезки, и наоборот.