Процедуры BREAK, CONTINUE, EXIT и HALT
Процедуры BREAK, CONTINUE, EXIT и HALT
Процедура BREAK применяется для досрочного прекращения циклов WHILE, REPEAT…UNTIL и FOR.
Пример: Определение номера первого нулевого элемента в массиве А
VAR
i, num : Integer;
A : array[1..10] of Integer;
BEGIN
. . . { Ввод элементов массива А }
num := 0;
FOR i:=1 TO 10 DO { Цикл для i от 1 до 10 }
IF A[i]=0 THEN begin { если найден нулевой элемент }
num := i; { запоминаем его номер }
BREAK { прекращаем цикл }
end;
IF num <> 0 THEN WriteLn(num)
ELSE
WriteLn(‘Нулевых элементов нет’);
END.
Процедура CONTINUE вызывает переход к следующей циклической итерации игнорируя расположенные ниже операторы, составляющие тело цикла.
Пример: Определение наибольшего общего делителя (НОД) двух чисел
VAR
CommDiv, { кандидат в НОД }
num1, { первое число }
num2 : Integer; { второе число }
BEGIN
Write(‘Введите первое число: ’); ReadLn(num1);
Write(‘Введите второе число: ’); ReadLn(num2);
FOR CommDiv := num1 DOWNTO 1 DO begin
IF (num2 mod CommDiv)<> 0 THEN
CONTINUE;
IF (num1 mod CommDiv) = 0 THEN begin
WriteLn(‘Наибольший общий делитель: ’, CommDiv);
BREAK
end {if}
end {for}
END.
В примере применен цикл FOR, в котором по убывающий перебираются возможные кандидаты в наибольший общий делитель. Критерий делимости – равенство нулю остатка от деления (операция mod). Если кандидат (значение переменной CoomDiv) не является делителем числа num2, по команде CONTINUE начинается следующий проход цикла, а операторы, оставшиеся в теле цикла, не выполняются. Если число (CommDiv) оказывается делителем числа num2 и num1, что проверяется вторым оператором IF тела цикла, значит, оно – общий делитель. А поскольку перебор идет от больших к меньшим значениям, первый найденный общий делитель – наибольший. Выводим его на печать и прерываем цикл командой BREAK.