Изучение принципов алгоритмического программирования на языке Pascal

       

Операторы циклов


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

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

Если перед каждой итерацией цикла в алгоритме предусмотрена проверка условия, при ложности которого итерация не имеет смысла, то такой цикл называется циклом с предусловием. Цикл с предусловием иногда называют циклом «пока». Синтаксис оператора цикла с предусловием и блок-схема, эквивалентная  циклу, показаны на рис. 5.



While <выражение> do

  <оператор>;

Рис. 5. Цикл с предусловием While

Если в теле цикла требуется выполнить не один оператор, а целую последовательность операторов, то её следует заключить в операторные скобки Begin-End.

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

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

While abs(x)>0.5 Do Begin

  x:=x*0.1;

  y:=y+x;

End;

Если необходимость новой итерации может быть установлена по завершении текущей, следует использовать цикл с постусловием. Цикл с постусловием называют также циклом «до». Синтаксис оператора цикла с постусловием и блок-схема, эквивалентная  циклу, показаны на рис. 6.

Repeat

  <оператор1>;

  …

  <операторn>;


Until <выражение>;

Рис. 6. Цикл с постусловием Repeat-Until

Существует ряд принципиальных отличий оператора Repeat-Until от оператора While:

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

-         логическое выражение в цикле с постусловием определяет условие выхода из цикла, в отличие от выражения в цикле с предусловием, определяющего условие продолжения;

-         синтаксис оператора Repeat-Until не требует использования операторных скобок, если в теле цикла более одного оператора.

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

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

Неотъемлемым атрибутом такого цикла является переменная-счётчик, в которой хранится информация о текущей итерации.

Синтаксис оператора цикла по счётчику и блок-схема, эквивалентная  циклу, показаны на рис. 7.

Рис. 7. Цикл по счётчику For

В языке Pascal возможен автоинкрементный (to) или автодекрементный (downto) цикл по счётчику. В первом случае происходит увеличение переменной-счётчика на 1 в конце каждой итерации, во втором – уменьшение на 1. Автоинкрементный цикл продолжается, пока значение счётчика не больше заданного конечного значения, автодекрементный – пока не меньше.

Блок-схема на рис. 7 иллюстрирует автоинкрементный вариант цикла по счётчику.

Переменная-счётчик доступна операторам в теле цикла только на чтение. В процессе работы цикла по счётчику операторам в теле цикла не допускается изменять текущее или конечное значение счётчика. После окончания цикла переменная-счётчик содержит неопределённое значение.

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

Для преждевременного завершения текущей итерации цикла любой разновидности и начала новой итерации следует использовать оператор Continue.

Для преждевременного выхода из цикла – оператор Exit.


Содержание раздела