Н. Джехани - Язык Ада (1988) (1160771), страница 10
Текст из файла (страница 10)
Память для переменной ТЕМР распределяется при входе в блок и освобождается при выходе из него. 1.4.7. Оператор выхода [5.71 Оператор выхода ехй служит для выхода из цикла либо безусловно [если не указано логическое выражение), либо условно [когда присутствует логическое выражение). ехй [имя никла[ [згйеп логическое вырагкение[; Если не указано имя цикла, то завершается самый внутренний цикл, охватываю- щий оператор выхода.
1.4.8. Оператор возврата [5.81 Оператор возврата ге$нгп используется для выхода из функции, процедуры или оператора принятия асеев. В случае функции оператор возврата используется также и для возврата значения, вычисленного функцией. Оператор возврата, имеющий формулу геГнгп выражение; необходимо использовать для выхода из функции. Значение, возвращаемое функцией, — это значение выражения. Для выхода из процедуры используется форма ге$нгп; 1.4.9.
Оператор перехода [5.91 Перед любым оператором можно записать метку в форме «идентий[икатор» Метки идентифицируют связанные с ними операторы и используются в операторах перехода яойк Оператор перехода указывает явную передачу управления на тот оператор, чья метка указана в нем. Оператор перехода имеет форму йопз метка; Бессистемное использование оператора перехода вредно, поскольку затрудняет понимание программы [)э1Хб8б, КМ)74[.
В связи с этим в языке Ада предусмотрена сильно ограниченная версия оператора перехода. Его нельзя использовать для передачи управления из подпрограммы, пакета или тела задачи, а также из оператора принятия. Ввв влии 1.5 Подпрограммы 161 Существуют четыре вида компонент программы, из которых строится программа: подпрограммы, пакеты, задачи и настраиваемые модули. Подпрограммы могут компилироваться раздельно, и их называют компилируемым модулем". Подпрограммы в языке Ада имеют две разновидности — процедуры и (бункции. Выполнение процедуры характеризуется результатом ее выполнения (например, изменением значений !и оо( параметров, присваиванием значений оп( параметрам или изменением глобальных переменных); функции используются для возврата значений.
Подпрограмма вызывается (для выполнения) посредством вызова подпрограмм. Вызов процедуры — зто оператор, в то время как вызов функции — зто операнд в выражении. Выполнение процедуры завершается по достижении конца процедуры или при выполнении оператора возврата (ге(вгп). Выполнение функции должно завершаться выполнением оператора возврата, который возвращает результат функции. Подпрограммы на языке Ада рекурсивны и реентерабельны. Подпрограмма состоит из двух частей: специ(рикации подпрограммы и тела подпрограммы.
Спецификация подпрограммы содержит имя подпрограммы, имена и типы ее параметров и в случае функций тип результата. Спецификации подпрограмм имеют форму ргоседвге имя 1((рормальнгие параметры)1; увпсйоп имя 1((рормальные параметры)1 ге(вгп Т; где имя — зто идентификатор (или в случае функций знак операции, заключенный в двойные кавычки), а Т вЂ” зто имя типа или подтипа. Ниже даны примеры спецификаций подпрограмм: рюседцге ЕХТЕХьэ (Б: !и оп( БЕ(2()ЕХСЕ); 1впс(!оп БСгКТ (Х: гп ХОХ ХЕСзАТ1ЧЕ КЕАЬ; ЕРБ: !п РОЯ КЕАЬ:= 0.001) ге!пуп Н.ОАТ, !ппсйоп Х(эЬЬ ЯЕЯ ге(вгп БЕ( ЫЕХСЕ; Тела подпрограмм имеют формуэ~ ргоседвге имя 1((1)ормальнгде параметры)1 !в описания )зей)п последовательность операторов " Программа — это набор из одной или более единиц компиляции, передаваемых на обработку компилятору совместно или раздельно.
Описания и тела подпрограмм и пакетов, настраиваемые описания и конкретизации, а также подъединицы (тела подпрограмм, пакетов и задач, описанных в других компилируемых модулях, — все это компилируемые модули языка Ада. "Запись имени подпрограммы в конце ее тела, тэх после зарезервированного слова епй, является Факультативной. Вместе с тем указание этого имени служит примером хорошего стиля программирования, поскольку становятся более удобным для чтения программы.
По этой причине в приведенных ФоРмах записи тел подпрограмм не показано, что имя подпрограммы в конце его тела является Факультативным. Подобный стиль принят также для специФикации пакета и тела, специФикации задачи и тела и т.д. Глинн ! [ехсерйоп обработчики исключений) епб имя; гппс!!оп имя [[Яормальньге-параметры)) ге!пгп Т [в описания Ьей[п последовательность операторов [ехсерйоп обработчики исключений[ епг[ имя; Как уже отмечалось ранее, Т вЂ” это тип результата функции. В разделе описаний тела подпрограммы описания всех объектов, типов, подтипов, спецификации представления и исключения должны предшествовать телам подпрограмм, пакетов и задач.
Спецификация подпрограммы может быть опущена только в том случае, когда подпрограмма вызывается после задания ее тела (предполагается, что оно не описано в видимой части пакета). В этом случае тело подпрограммы выступает в качестве своей собственной спецификации. Вид формального нагнгменям Пааеление фармальнага нараметра !н Такой формальный параметр выступает как константа в подпрограмма причем значение ему присваивается соответствующим фактическим параметром. Если вип параметра явно не указан, то по умолчанию предполагается !п. Этот вил следует использовать в случае, когда значениефактического параметра передастся соответствующему формальному и значение не возвращается из подпрограммы Формальный параметр выступает как локальная переменная.
Его значение присваивается соответствующему фактическому параметру в случае нормального завершения подпрограммы. Этот вид следует использовать в случае, когда фактический параметр получает значение от соответствующего формального параметра опг !и опг Формальный параметр выступает как инилиапизированная локальная переменная.
Его начальное значение совпадает со значением соответствуюшегофактического параметра. При нормальном завершении подпрограммы значение формального параметра присваивается соответствующему фактическому параметру. Этот вид следует использовать, когда фактический параметр задает значение соответствующему формальному параметру.
а тот в свою очередь передает значение фактическому параметру при нормальном завершении подпрограммы " Эти виды в литературе по информатике [Сгн!71, РНА75! известны как вызов по значенню, имени и ссылке соответственно. 1.5.1. Формальные параметры Формальные параметры полпрограммы являются локальными по отношению к ней. Они могут быть трех видов — [п, оп! и !п опг": Вве енне Все формальные параметры функции должны иметь вид !и. (Сущность такого ограничения заключается в предотвращении описания функций с побочным эффектом; тем не менее глобальные переменные могут изменяться, что приводит к побочному эффекту.) 1.5.2.
Примеры подпрограмм 1.5.2.1. Перестановка Следующая процедура переставляет нли обменивает значения двух переменных с плавающей точкой: ргосег!вге БЕАР (Х, У: !п ов! Н.ОАТ) Ь Т. РЬОАТ, — вспомогательная переменная Ьей!и Т:= Х; Х:= г'; У:= Т, епо БЕАР; 1.5.2.2. Вычисление квадратного корня методом Ньютона Функция БОКТ вычисляет положительное значение квадратного корня из вещеспзенного числа с плавающей точкой методом Ньютона.
((г + 1)-е приближение ак ы для квадратного корня из значения Х задается итеративной формулой а„„= 0.5 ак+— Вычисления прекращаются, когда абсолютная величина разности между двумя последовательными итерациями станет меньше, чем ЕРБ (ЕРБ > 0). Функция БОКТ использует подтипы ХОХ ХЕОАТ1ЧЕ КЕАЬ и РОБ КЕАЬ, описанные как звЫуре ХОХ ХЕОАТ1ЧЕ КЕА1. Ь РЬОАТ гапке О.О..РЬОАТ'ЬАБТ, явЬ!уре РОБ КЕА1. Ь РЬОАТ гапае РЬОАТ'БМАЬЬ..РЬОАТ'ЬАБР, Значения ХОХ ХЕОАТРЧЕ КЕАЬ имеют значения типа ГЬОАТ > 0.0, а значения РОБ КЕАЬ вЂ” значения > наименьшее положительное (ненулевое) модельное число, связанное с типом НОАТ.
1впсбоп БОКТ (Х:!и ХОХ ХЕОАТ1ЧЕ КЕАЬ; ЕРБ: гп РОБ КЕАЬ:= 0.001) ге!вен Н.ОАТ Ь вЂ” воспринимаются только числа с плавающей точкой >0.0, — возвращается положительный квадратный корень с точ— постыл ЕРБ, которая равна 0.001 01ЛЭ ЧАШЕ:РЬОАР— !с-е приближение квадратного корня ХЕЧг' ЧАШЕ:Н.ОАР— ()г+!)-е приближение квадратного корня Глава 1 Ьея(п О1.О ЧАШЕ:= 0.0; — некоторое значение, необходимое — для входа в цикл Ь(Е% ЧАШЕ:= Х/2.0; — начальное значение а'Ы!е аЬя (г(Е% ЧАШŠ— О(,О ЧАШЕ) ) ЕРБ 1оор О(.О ЧАШЕ:= ХЕ% ЧАШЕ; ХЕзЧ ЧАШЕ:= 0.5а(01,Р ЧАШЕ+ Х/О1.1) ЧАШЕ); епд !оор; гегпгп ХЕ% ЧАШЕ; епй Б( ~КТ; 1.5.2.3. Матричное сложение Операция +, которая обозначает сложение целых и вещественных чисел, будет распространена и на матричное сложение.
Приведенный ниже пример иллюстрирует использование неограниченного индексируемого типа как типа формального параметра и совмещение оперений. Неограниченный индексируемый тип позволяет передавать в подпрограмму массивы различной длины в качестве фактических параметров. Совмещение операций — это описание операции с операндами, отличными от определенных в языке. Матричное сложение опишем для матриц неограниченного индексируемого типа МАТК1Х, который определяется заранее как 1уре МАТК1Х !я аггау (!)чТЕОЕК гапке < >, 1ХТЕОЕК гапке < >) о1 Р ОАТ', Совмещение операции + определяется так: !ппсйоп "+" (Х, У: МАТК1Х) гегвгп МАТК1Х 1з — матрицы Х и У могут иметь любые границы, но — они должны быть одинаковы для матричного сложения.