Оператор break на языке Паскаль

Циклы не прекращаются, пока условие в скобках не будет равно false. Однако часто случается так, что итерации циклов необходимо контролировать и в языке Паскаль для этого есть несколько операторов: break, continue, goto и exit. Рассмотрим их по подробнее и разберемся как можно контролировать процесс повторяющегося цикла.

Многие операторы прерывания в Паскале обеспечивают досрочный выход из блока кода. Однако недостаток в том, что этих операторов несколько, и они используются в разных конструкциях. К примеру, тот же break может быть использован только в циклах. Применение в других контекстах не предусмотрено.

Оператор goto

Оператор goto работает в связке с метками. Синтаксис этого оператора следующий: goto имя метки; Здесь указывается — перейти на то место кода, где установлена метка. Оператор goto указывает на какую метку нужно перейти, которая может быть установлена в любом участке кода.

Пример:

label go_here; // объявляем метку для оператора goto
var digit: real;

begin
go_here: // устанавливаем метку — сюда будет возвращаться алгоритм
write (‘Введите цифру: ‘);
readln (digit);

if digit < 0 then // если число больше нуля то возвращаемся на метку
goto go_here;

digit := sqrt(digit);

write (‘Квадратный корень числа равен: ‘, num:5:2);

readln
end.

Пример: бесконечный цикл

label here;
var i: integer

begin
here: // метка
for i:=0 to 3 do begin
write(i);
if i>2 then goto here; // переход на метку
end;
end.
//Вывод: 0123012301230123… и так до бесконечности

Здесь если пользователь вводит число меньше нуля, то программа снова запрашивает у него ввод цифры. Это будет происходить до тех пор, пока пользователь не введет число равное нулю или больше.

Оператор continue

Данный оператор предназначен для пропуска итераций в цикле. Если итераций предусмотрено 5, то с помощью continue их можно уменьшить на определенное количество.

Пример:

var
digit, total: real;
i: integer;

begin
digit := 0;

for i := 1 to 8 do begin
write (‘Введите цифру: ‘);
readln (digit);
if digit < 0 then
continue; // Если введено число меньше нуля, то итерация пропускается.
total := digit + digit;
end;

write (total:10:2);

readln
end.

Пример: Уменьшение числа итераций

var i: integer;
begin
for i:=0 to 15 do begin
if i>8 then continue;
write(i);
end;
end.
// Вывод: 9 10 11 12 13 14 15

Оператор exit

Оператор exit служит для принудительного выхода из блока кода и возвращения в основной поток алгоритма. Если его поставить в основном потоке, то принудительно будет завершена основная программа.

Пример:

var
chislo: integer;

begin
write(‘Введите любое число ‘);
readln(chislo);
if chislo < 0 then
begin
writeln(‘Fatal ERROR!’);
exit; // принудительный выход из программы и прекращение выполнения дальнейших инструкций
end;
writeln(‘Корень квадратный = ‘, sqrt(chislo));
readln
end.

В отличии от операторов break и continue, exit и goto можно использовать не только в цикле, но и процедурах, функциях, основном потоке программы.

Пример:

var x,t: integer;

procedure sum(y) begin
if y<1 then exit; // если y равен нулю, то выход из процедуры
x:= y*y;
end;

begin
again: // если был принудительный выход из процедуры, то операция повторяется
write(«Введите число»);
read(t);
if sum(t) then exit; проверка на выполнение процедуры
else goto again;
end.
//Если процедура выполнится, то будет принудительный выход из программы. В ином случае программа запросит повтор ввода числа

Следует запомнить тот факт, что оператор exit принудительно останавливает выполнение бого блока кода, в котором он находится.

Оператор break

Данный оператор выполняет ту же функцию, что и exit, но только в пределах цикла. Обычно его используют в связке с каким-либо условием. Если оно соблюдается или нет, то break останавливает цикл, а алгоритм продолжает выполнения дальнейших операторов.

Пример:

var
number: real;
j: integer;

begin
for j := 1 to 5 do begin
write (‘Напишите какое-нибудь число: ‘);
readln (number);
if number = 0 then
break; // если вводимое число равно нулю, то происходит выход из цикла и переход в основной контекст программы
writeln (number)
end;

readln;
end.

Пример:

var
stroka : String;
begin
while True do // бесконечный ввод строки
begin
ReadLn(S);
if S = » then // если строка не пустая, то цикл продолжает выполнение
Break; // при пустой строке выход из цикла
WriteLn(S);
end;
end.

Можно ли использовать break вне циклов?

Вне циклов, то есть, в функциях и блоках кода break не несет смысловой нагрузки. Его наличие приведет к ошибке. Для выхода из блока кода используют оператор exit.

Нужен ли оператор break в конструкции case of?

В С-подобных языках программирования оператор break прерывает выполнение оператора switch — аналога case of. В Паскале не требуется устанавливать break в case, компилятор сам выходит из этого блока, если находит совпадение.

Пример:

label again; // метка для перехода
var chosen_digit: integer;

begin
again: // переход на метку сюда
readLn(chosen_digit);

case chosen_digit of
1: write(«1»); // В отличие от С-подобных языков оператор break не требуется
2: write(«2»);
3: write(«3»);
4: write(«4»);
5: write(«6»);
6: write(«6»);
else begin
write(«Число должно быть не более 6»);
goto again; // если число не отвечает требованию, то ввод заново
end;
end.

Здесь при выполнении одного из case, алгоритм не будет продолжать дальнейшее выполнение. В С-подобных языках вывелись бы остальные числа после совпадения.

В Паскале нет оператора return

Процедуры в Паскале ничего не возвращают. Функции возвращают! В других языках для возврата результата используют оператор return. Паскаль устроен немного по другому. Для возврата используют локальную переменную, которая соответствует значению функции.

Пример:

var a: real;
function Summa(x: real, y: real);
begin
Summa:=x+y; // это и будет возвращаемое значение
end;
begin
a:=Summa(5,5);
write(a); // 10
end.

Как выйти из функции без оператора exit?

Никак! В других языках достаточно написать return. В паскале для этого применяется только оператор exit.

Пример:

var b: real;
function Addition(c: real, d: real);
var z: integer
begin
z:=c+d;
if z=0 then exit // если z равно нулю, то выход из функции без возврата значения
else Addition:=z; // это и будет возвращаемое значение
end;
begin
b:=Addition(0,0);
write(a); // переменная не инициализирована
end.

Отличие оператора exit от break

Казалось бы, они выполняют одну и ту же функцию. Однако есть ситуации, когда exit обладает катастрофическими последствиями для алгоритма. Эти ситуации возникают , когда в функции есть цикл.

Если выйти из цикла посредством оператора exit, то выход осуществится и из функции или процедуры. А нам нужно, чтобы выход произошел из цикла и только. Тут и применяется оператор break, который останавливает цикл, а функция продолжает свое выполнение. Если в цикле поставить exit, то код будет выполняться в основном потоке, а выполнение функции остановится.

Пример: exit в цикле процедуры

procedure sign(s: Sring)
var i:integer;
begin
for i:=0 to 10 do begin
if i=4 then exit // полный выход из процедуры
write(s);
end;
write(«Продолжение процедуры»); // проигнорируется
end;

begin
sign(«hello»); // hello будет написано 4 раза
end.

Пример: Та же функция, только с break

procedure sign(s: Sring)
var i:integer;
begin
for i:=0 to 10 do begin
if i=4 then break //только выход из цикла
write(s);
end;
write(«Продолжение процедуры»); // выполнится
end;

begin
sign(«hello»); // hello будет написано 4 раза и Продолжение процедуры
end.

Итог

Следует запомнить тот факт, что отдельные операторы прерывания обладают своими особенностями. Break завершает выполнение цикла, но не функции или процедуры. Exit полностью закрывает контекст функции или процедуры.

Оператор goto используется в связке с меткой. Он переводит алгоритм в точку установленной метки. Его можно сравнить с циклом. Однако у него более гибкая работа. Он может перевести алгоритм в любую точку программы — из функции в основной контекст, и наоборот.

Оператор continue призван для пропуска итераций цикла. Его применяют исключительно в циклах. Он не прерывает весь алгоритм цикла, но только одну итерацию. В функциях, процедурах и основном блоке его применение не допустимо, также, как и оператора break. Универсальным оператором остается exit, но его следует применять осторожно, так как он осуществляет выход из текущего блока.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *