Скачиваний:
35
Добавлен:
29.03.2016
Размер:
445.9 Кб
Скачать

Оператор continue

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

?

F

 

T

 

continue

 

Рисунок 5 – Оператор continue

 

Бесконечный цикл

Кроме уже рассмотренных видов циклов, в практике программирования, довольно часто, используется бесконечный цикл, т. е. цикл который никогда не завершается, рисунок 6.

Тело цикла

Рисунок 6 – Бесконечный цикл

Хотя в Object Pascal нет конструкции, непосредственно реализующей этот вид цикла, он легко реализуется с помощью уже рассмотренных конструкций цикла. Возможны два варианта организации бесконечного цикла

while true do begin

//тело цикла

end;

или repeat

//тело цикла

until false;

Первый вариант предпочтительнее, с точки зрения читаемости программы. Бесконечный цикл можно также организовать с помощью оператора goto.

{$IFDEF FPC} {$MODE DELPHI}

{$ENDIF}

{$APPTYPE CONSOLE} program InfiniteLoop;

label beg_loop, end_loop;

begin beg_loop: //операторы

goto beg_loop;

end_loop: end.

Цикл с выходом из середины

Цикл с выходом из середины – наиболее общая форма условного цикла. Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Конструкция начала маркирует точку программы, в которой начинается тело цикла, конструкция конца – точку, где тело заканчивается. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся на оператор, следующий за конструкцией конца цикла. Естественно,

чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла, рисунок 7

 

Тело цикла

T

exit?

F

 

Рисунок 7 – Цикл с выходом из середины

Принципиальным отличием такого вида цикла от рассмотренных выше является то, что часть тела цикла, расположенная после начала цикла и до команды выхода, выполняется всегда (даже если условие выхода из цикла истинно при первой итерации), а часть тела цикла, находящаяся после команды выхода, не выполняется при последней итерации.

В Object Pascal такой цикл может быть смоделирован как комбинация бесконечного цикла и оператора досрочного выхода из цикла, например

while true do begin

//тело цикла

if <условие> then break;

//тело цикла

end;

Циклы с несколькими выходами

Нередко необходимо завершать цикл при выполнении нескольких различных условий. Например, цикл поиска в списке необходимо завершить при обнаружении элемента или при достижении конца списка. Такие циклы легко создавать как комбинацию бесконечного цикла и оператора досрочного завершения цикла, например

while true do begin

//тело цикла

if <условие 1> then break;

//тело цикла

if <условие 2> then break; //тело цикла

end;

Организация циклических конструкций с помощью оператора goto

Для примера рассмотрим реализацию цикла while do с помощью оператора goto.

Листинг 6

{$IFDEF FPC} {$MODE DELPHI}

{$ENDIF}

{$APPTYPE CONSOLE} program Sum5;

label

beg_loop,

//метка

начала цикла

 

end_loop;

//метка

окончания цикла

var i, n, summa :integer;

begin

writeln('Vvedite n'); readln(n);

//инициализация переменных summa:=0;

i:=1;

beg_loop: //начало цикла

if i >= n + 1 then goto end_loop;

//начало тела цикла summa:=summa + i; inc(i);

//конец тела цикла

goto beg_loop;

end_loop: //конец цикла

writeln('summa=', summa); readln;

end.

Как видно реализация цикла с помощью оператора безусловного перехода goto более громоздкая и сложная, чем при помощи конструкции while do. Но именно в конструкции такого типа компилятор переводит все циклические конструкции так как процессор не содержит команд для организации циклов. Еще более громоздкие конструкции будут при организации вложенных циклов. Для примера рассмотрим организацию функции break. Изменим программу, приведенную в листинге 6, таким образом, чтобы цикл прерывался при достижении переменной summa некоторого значения.

Листинг 7

{$IFDEF FPC} {$MODE DELPHI}

{$ENDIF}

{$APPTYPE CONSOLE} program Sum6;

Соседние файлы в папке ЛР по программированию FreePASCAL