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

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 ;                           - -  конец   блока