5.5 операторы циклаОператоры цикла в языке Ада имеют три формы: loop и могут быть именованными. Простейший цикл имеет вид: LOOP - - Последовательностъ_Операторов; LOOP; Он создаёт бесконечный цикл, использовать оператор выхода [ Имя_Цикла ]; EXIT [ WHEN Условие ] П Например : WHEN Вариант_М => Последовательность „Операторов; WHEN OTHERS => Последовательность _Операторов; END CASE; Выражение в операторе выбора должно быть дискретного типа. D Например: case MODE_OPR is when '+' => ADD; when '-' => SUBSTR; when '*' => MULTI; when '/' => DIVIDE; when others => X : = Y; end case; СОВЕТЫ: * Используйте оператор Case вместо if .. end if везде, где это возможно. * Минимизируйте использование части Others в операторе Case. * Используйте расширения типов и диспетчеризацию типов вместо оператора Case. MM: loop get (x); if x = 0 then exit MM; end if; end loop MM; Праметрический цикл задаётся с помощью цикла FOR FOR Параметр_Цикла [REVERSE] LOOP Дискретный_Диапазон - - Последовательность_Операторов; END LOOP; Наличие ключевого слова Reverse присваивает параметру цикла значение из дискретного диапазона в обратном порядке. Параметр цикла явно не описывается, так как он определяется типом дискретного диапазона. Поэтому он локален по отношению к циклу и вне его не существует. Кроме того, параметр цикла нельзя изменять и передавать как параметр в процедуру, которая сможет это сделать. П Примеры: fori in 1 .. 10 loop Х:= Х+ Sin(i); 49 Ада 95. Введение в программирование Глава 5. Операторы 48
end loop; for j in reverse M'first . . M'last loop Rez : = Rez + M(j); - - диапазон цикла задаётся end loop; - - через атрибуты массива Оператор цикла со схемой итерации WHILE имеет вид: WHILE Условие LOOP - - Последовательность_Операторов; END LOOP; Перед началом выполнения последовательности операторов проверяется условие; если его значение True, то последовательность выполняется, если False, то выполнение оператора цикла заканчивается. П Пример: DET: while TAB(k)<100 loop S: = S + TAB(k); k: = k+1; end loop DET; - - именованный цикл Именованный оператор цикла целесообразно использовать в операторе exit, а также для вложенных циклов. С целью повышения скорости обработки двумерных массивов рекомендуется их обработку выполнять, начиная со второго индекса: type ТТ is array ( 1 .. N, 1 .. М ) of integer ; Massiv : ТТ ; for j in 1 .. M loop for i in 1 .. N loop -; - обработка Massiv ( i , j ) ; - - типа ТТ end loop ; end loop ; СОВЕТЫ: * Внимательно задавайте границы циклов; используйте для этого по возможности атрибуты типов и обьектов; * Используйте в циклах конструкцию for; * Используйте отрезки вместо циклов при копировании частей массивов; * Избегайте оператора exit в циклах for и while; Ф Помечайте вложенные операторы цикла, особенно если они содержат оператор выхода 5.5 Оператор перехода Определяет явную передачу управления на помеченный меткой оператор: GOTO Имя_Метки; Метка записывается в форме «Идентификатор» Использование оператора перехода затрудняет понимание программы и его следует избегать. Кроме того, его нельзя использовать для передачи управления из подпрограммы, пакета, тела задачи и оператора accept. СОВЕТЫ: * Не используйте оператор Goto !!! 5.7 Операторы блока Оператор блока содержит последовательность операторов, которой может предшествовать раздел локальных описаний, а завершать -обработчик исключений: - - Описательная_Часть;] - - Последовательностъ_0ператоров; - - Обработчики_Исключений] [DECLARE BEGIN [ EXCEPTION END; 7 — Корочкин А. В.
Ада 95. Введение в программирование 50 Глава 6. Модули 51
Блок используется для ограничения области действия описаний, так как все локальные описания существуют только в блоке и не существуют перед блоком и после него. Память для объектов, описанных в блоке, распределяется при входе в него и освобождается при выходе из него. Блок может быть помеченным. D Пример: - - обмен значениями векторов SWAP: declare Vector; - - локальная переменная в блоке = VA; = VB; = Temp; Temp begin Temp VA VB end SWAP - - именованный блок ffl СОВЕТЫ: * Используйте оператор блока для локальных описаний и локальных обработчиков исключений. * Помечайте вложенные блоки. П Пример использования операторов блока, цикла и выхода : declare Deep : Matrix ; - - локальная переменная begin А : for i in 1 .. N loop - - вложенные именованные В : for J in 1 .. N loop - - циклы Deep(j,i):= MA( i,j) - MB(j,i); if Deep(j.i)= 0.0 then exit В ; - - выход из внутреннего цикла end if; end loop В ; end loop A ; Res : = Deep ; end ; - - конец блока |
| Оглавление| |