Оператор цикла с параметром (со счетчиком) FOR ... DO

Организация циклов с помощью оператора FOR

 

Особенности циклов

Для всех операторов цикла характерны следующие особенности:

− повторяющиеся вычисления записываются всего лишь один раз;

− вход в цикл возможен только через его начало;

− переменные оператора цикла должны быть определены до входа в циклическую часть;

− нужно предусмотреть выход из цикла. Если этого не сделать, то вы­числения будут длиться бесконечно. В этом случае говорят, что произошло «зацикливание». Бесконечный цикл - это циклический участок в алгоритме или программе, в котором не предусмотрены средства выхода из цикла при достижении некоторого условия и который не будет прерван средствами опе­рационной системы;

− процедура Break прерывает выполнение цикла, а процедура Continue начинает новую итерацию цикла, даже если предыдущая не была завершена.

 

Оператор цикла с параметром (со счетчиком) FOR ... DO

 
 

Оператор цикла со счетчиком for подходит для программирования только таких цикличе­ских фрагментов, в которых до выполнения, в которых до выполнения цикла известны начальное и конечное значения счетчика повторений цикла. Это обусловливает его менее широкую сферу применения, чем бо­лее универсальных операторов while и repeat. Однако в тех случаях, когда его использование возможно, оператор for благодаря своей высо­кой наглядности имеет несомненное преимуще­ство перед операторами циклов с условиями.

Схематично цикл со счетчиком изображается следующим образом:

 

Упрощенно общую структуру оператора цикла for можно представить одним из следующих способов:

1. Если счетчик при выполнении цикла наращивает свое значение:

FOR I: = N1 ТО N2 DO <тело цикла>;

где I – управляющая переменная цикла, которая должна быть перечисляемого типа (целая, символьная и т. д.);

N1 – начальное значение управляющей переменной цикла;

N2 – конечное значение управляющей переменной цикла.

Шаг изменения управляющей переменной равен + 1.

Чтобы оператор выполнился хотя бы один раз, N1 (начальное значение счетчика) должно быть не больше, чем N2 (конечное значение счетчика).

2. Если счетчик при выполнении цикла уменьшает свое значение, то при программировании может быть использован другой оператор цикла:

FOR I: = N2 DOWNTO N1 DO <тело цикла>;

где I – управляющая переменная цикла, которая должна быть перечисляемого типа (целая, символьная и т. д.);

N2 – начальное значение управляющей переменной цикла;

N1 – конечное значение управляющей переменной цикла.

Шаг изменения управляющей переменной равен – 1.

Чтобы оператор выполнился хотя бы один раз, N2 (начальное значение счетчика) должно быть не больше, чем N1 (конечное значение счетчика).

Цикл for выполняется заданное число раз. Чтобы прервать выполнение досрочно, необходимо увеличить I до конечного значения.

Заметим, что для оператора for, в отличие от while и repeat, установка начального значения счетчика циклов выполняется не перед заголовком цик­ла, а прямо в заголовке. Кроме того, после окончания тела цикла наращива­ние (уменьшение) значения счетчика происходит автоматически. Таким обра­зом, специального оператора для увеличения значения счетчика I:= I + 1 не требуется. Более того, этот оператор приведет к неправильной работе цикла.

 

Рассмотрим задачи с применением оператора цикла for.

 

Задача 1

Вычислить значения двух величин по формулам: А = 2i и В = 2i +1, где i меняется от 1 до 4 с шагом 1.

Program Lab5_1;

Var

I, В, А : Integer;

Begin {1}

For I : = 1 To 4 Do Begin {2}

A : = 2 * I; В : =2 * I + 1;

WriteLn (A : 3, В : 3);

End; {2}

End. {1}

Пояснения к задаче 1

I - управляющая переменная циклом (по ее значению цикл начинается и завершается) принимает значения: 1= 1, I = 2, I = 3, I = 4 (шаг = 1).

Выполняются операторы циклической части: значения А и В вычисля­ются по формуле и принимают следующие значения в процессе выполнения программы (табл. 6). Всего цикл проработает четыре раза. При I = 4 послед­ний раз идет вычисление А, В и управление передается за пределы цикла.

Таблица 6

I - управляющая переменная циклом; А, В - выражения Проходы цикла
Первый Второй Третий Четвертый
I
А : = 2 * I
В : = 2 * I + 1

Вложенные циклы

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

Наглядный пример - заполнение таблицы умножения с помощью двух вложенных циклов:

for i: =1 to 9 do

for j : = 1 to 9 do

WriteLn (i, ‘x’, j,’=’, i * j);

Для каждого из девяти значений параметра внешнего цикла i (множимо­го) исполнится внутренний цикл, в котором его параметр j (множитель) меня­ется от 1 до 9.

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

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

Операторы цикла используются для вычислений, повторяющихся многократно. В Паскале имеется три вида циклов: цикл с предусловием while, цикл с постусловием repeat и цикл с параметром for. Каждый из них состоит из определенной последовательности операторов.

Блок, ради выполнения которого и организуется цикл, называется телом цикла. Остальные операторы служат для управления процессом повторения вычислений: это начальные установки, проверка условия продолжения цикла и модификация параметра цикла (рис. 2.5). Один проход цикла называется итерацией.


Рис. 2.5. Структурные схемы операторов цикла

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

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

Параметром цикланазывается переменная, которая используется при проверке условия цикла и принудительно изменяется на каждой итерации, причем, как правило, на одну и ту же величину. Если параметр цикла целочисленный, он называется счетчиком цикла. Количество повторений такого цикла можно определить заранее. Параметр есть не у всякого цикла. В так называемом итеративномцикле условие продолжения содержит переменные, значения которых изменяются в цикле по рекуррентным формулам 1)

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue и goto. Передавать управление извне внутрь цикла не рекомендуется, потому что при этом могут не выполниться начальные установки.

Цикл с предусловием while

Формат оператора прост:

while выражение do оператор

Выражение должно быть логического типа. Например, это может быть операция отношения или просто логическая переменная. Если результат вычисления выражения равен true, выполняется расположенный после служебного слова do простой или составной оператор (напомню, что составной оператор заключается между begin и end ). Эти действия повторяются до того момента, пока результатом выражения не станет значение false. После окончания цикла управление передается на следующий за ним оператор.

ВНИМАНИЕ Если в теле цикла необходимо выполнить более одного оператора, необходимо заключить их в блок с помощью ключевых слов begin и end.