10.6 примерыП Пример 1. Процедура для вычисления факториала. procedure Factorial ( N : natural ) return integer is begin if N = 0 then return 1 ; else return N * Factorial ( N -1 ); - - возбуждение исключения end if; excepion - - обработчик исключения when ConsraintJError = > return Integer'Last; end Factorial; При выполнении функции вычисления факториала возможны исключительные ситуации, связанные с тем , что : • аргмент функции может быть задан отрицательным числом ; • аргумент функции имеет большое значение и при вычислении функции произойдет переполнение. В первом случае предопределенное исключение Constaint_Error по несоответствию формального и фактического параметров возбуждается в программе, где вызывается функция Factorial, и соответствующий обработчик исключения должен быть предусмотрен в ней. Во втором случае исключение ConstrainJError по переполнению возбуждается уже при выполнении функции и обработчик исключения размещается в самой функции. Действия обработчика приведут к тому, что выполнение подпрограммы не завершится аварийно и в качестве результата при переполнении функция Factorial возвращает максимально допустимое в реализации значение целого типа. 15 — Корочкин А. В. Глава 10. Исключения 115 Ада 95. Введение в программирование 114
D Пример 2. Настраиваемый пакет для работы с буфером. generic N : positive ; in Elem); out Elem ); type Elem is private; package BUFFEFM/VORK; procedure ln_Buffer (X : procedure Out_Elem (Y procedure Cfean_Buffer; Over : exception; - - исключения Full : exception ; end BUFFER_WORK; package body BUFFER_WORK is Index : integer : = 0; Buffer: array (1 .. N ) of Elem ; procedure Clean_Buffer is begin for i in 1 . . N loop Buffer (i): = 0.0; end loop; end Clean Buffer; end In Buffer ; procedure Out_Buffer ( Y : out Elem ) is begin if Index = 1 then raise Full; - - возбуждение исключения при - - отсутствии данных в буфере else Index : = Index -1 ; Y : = Buffer (Index) ; end if; end Out_Buffer; end BUFFER_WORK; В данном примере настраиваемый пакет Buffer_Work предос тавляет пользователю пакета ресурсы для работы с некоторым буфе ром размерности N и типом элементов Elem. Ресурсами являются три процедуры : очистки буфера, записи в буфер по текущему индексу ( указатель Index ) и считывания из буфера верхнего элемена (указатель Index - 1). В пакете предусмотрены два исключения : • Full - для возбуждения исключения при попытке считывании информации из пустого буфера; • Over - - для возбуждения исключения при попытке записи в заполненный буфер. Так как обработчики исключений Full и Over отсутствуют в пакете, то при возбуждении этих исключений их обработка должна выполняться в тех частях пользовательской программы, где осуществляется вызов процедур In_Buffer и Out_Buffer. 15» procedure ln_Buffer (X : in Elem ) is begin if Index > N then raise Over; - - исключение по переполнению else Buffer (i): = X ; Index : = Index + 1 ; end if; 116 Глава 11. Настраиваемые модули Ада 95. Введение в программирование 117
|
| Оглавление| |