Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по информатике.DOC
Скачиваний:
29
Добавлен:
02.05.2014
Размер:
1.68 Mб
Скачать

1. 7. 6. Операторы ограничения и прерывания цикла

Данные операторы применяются внутри операторов цикла с параметром или условием. Операторы имеют вид:

Continue; - ограничение цикла,

Break; - прерывание цикла.

Операторы Continue; и Break; позволяют производить действия не для всех операторов внутри цикла. Действие оператора Continue; заключается в передаче управления на начало цикла, при этом контролируется условие выхода из цикла. Действие оператора Break; заключается в передаче управления оператору, следующему за последним оператором цикла, при этом не контролируется условие выхода из цикла. Во вложенных циклах операторы Continue; и Break; действуют только на цикл в котором они записаны. Приведем пример использования операторов для блокировки несанкционированного доступа в программу.

For i:= 1 to 3 do begin

Write( 'Введите ПАРОЛЬ:' ); Readln(S); {S и Parol - переменные одного типа}

If S = Parol Then Break { прерывание цикла }

else If i <> 3 Then Continue; { ограничение цикла }

Writeln( 'Доступ к программе ЗАПРЕЩЕН' );

Writeln( 'Нажмите Enter' ); Readln; Halt { прерывание программы }

end; { продолжение программы }

35

1. 7. 7. Оператор перехода к метке

Оператор перехода служит для передачи управления помеченному оператору и имеет вид:

Goto "метка";

Меткой может быть целое положительное число или идентификатор. Меткой помечается оператор, которому передается управление, например:

M1: Write('Введите x>=0'); Readln(x); If x<0 Then Goto M1;

Метки описываются в разделе описания, например: Label M1;

Метка не может стоять перед оператором Begin. . . end;

Следует избегать переходов внутрь операторов цикла.

Оператор перехода часто применяется для "досрочного" выхода из операторов цикла. Приведем пример операторов для расчета конечной суммы вклада через 10 месяцев (pr - процентная ставка), при условии досрочного снятия вклада, если начальная сумма "S1" возрасла более чем в два раза:

S:= S1; For i:= 1 to 10 do begin

S:= S*(1 + pr/100); If S > 2*S1 Then Goto M1 end;

M1: Writeln(S);

Приведем пример программы расчета наибольшего общего делителя двух натуральных чисел по алгоритму Евклида: наибольший обший делитель натуральных чисел "а" и "в" равен наибольшему общему делителю меньшего из чисел ("a" или "b") и остатка от деления большего числа на меньшее.

PROGRAM del;

label M1, M2, M3;

Var b, a: longint;

Begin

M3: Writeln('Введите два натуральных числа'); readln(a, b);

Writeln; if (a <= 0) or (b <= 0) then goto M3;

{------------------------------------------------ алгоритм -1 -------------------------------------------------}

M1: if a = b then Writeln('наибольший делитель =', a) else

begin if a > b then a:= a-b else b:= b-a;

goto M1 end; Writeln;

{ ---------------------------------------------- алгоритм -2 ------------------------------------------------}

M2: if a > b then a:= a mod b else b:= b mod a;

if (a= 0) or (b= 0) then Writeln('наибольший делитель =',a+b)

else goto M2;

Writeln('Нажмите Enter'); readln;

end.

36