Циклический алгоритм. Оператор с заранее известным числом повторений.
В тех случаях, когда нам необходимо выполнить одинаковые действия, в которых изменяется только какая-либо величина (так называемый параметр), то мы применяем операторы цикла. Это дает мощный толчок программированию, позволяя выполнять очень сложные алгоритмы.
Когда мы работали с графикой, то в одном из заданий вам предлагалось построить мишень – пять концентрических окружностей. Мы это легко сделали, пять раз написав оператор построения окружности circle, изменяя в нем каждый раз радиус.
Ну а если бы таких окружностей надо было бы 100? Неужели 100 раз писать практически одно и то же? Очень нелегко, даже если пользоваться копированием строк. Неужели нельзя как-нибудь полегче? Конечно можно! Нам на помощь приходит оператор цикла FOR…NEXT.
Итак, правила пользования оператором цикла for…next:
- Рассмотреть повторяющиеся действия и выделить в них равномерно изменяющуюся величину (параметр).
- Дать параметру имя.
- Определить для параметра начальное значение, конечное значение и шаг изменения, т. е. насколько за один раз увеличивается (или уменьшается) параметр.
- Написать оператор цикла, состоящий из трех частей:
-
заголовок цикла
- FOR параметр=нач значение ТО кон_значение STEP шаг
- тело цикла
- В теле цикла указываются один или несколько операторов, предназначенных для повторяющихся действий, причем, вместо конкретных значений изменяющейся величины указывают имя параметра.
- NEXT параметр
-
заголовок цикла
Рассмотрим пример построения мишени. Действуем по правилам.
При рисовании мишени изменяется радиус, это и будет параметр. Обозначим его буквой R. Пусть начальное значение r=20, конечное значение r=60, шаг изменения? r=io.
Записываем оператор цикла (предварительно, конечно, включив графический режим):
FOR R=20 TO 60 STEP 10 CIRCLE (320, 175), R, 14 NEXT R
Если мы также четко будем и в дальнейшем следовать этим правилам, то нам не составит труда работать с оператором цикла.
Необходимо отметить, что можно записывать оператор цикла в одну строку, это не ошибка:
FOR R=20 TO 60 STEP 10: CIRCLE (320, 175), R, 14: NEXT R
Но если в теле цикла много операторов, то такая запись будет плохо читаемой.
Как же работает оператор цикла на примере приведенной выше программы? Встретив заголовок цикла for, программа присваивает параметру начальное значение и переходит в тело цикла. Там находит команду circle, и исполняет ее, подставляя вместо параметра его начальное значение. Встретив команду next программа добавляет к предыдущему значению параметра величину шага, затем проверяет условие, не стало ли значение параметра больше конечного его значения, и, если нет, продолжает выполнение цикла. Если да, переходит к выполнению следующей за оператором цикла команды или заканчивает выполнение программы, если таковой отсутствует.
Таким образом, последнее значение параметра в нашем примере будет 70, после чего цикл закончится. (Попробуйте к программе добавить строку? "R=", – r и посмотрите, что появилось на экране.)
Теперь следует сказать несколько слов о составной части оператора цикла – шаге изменения параметра step. Довольно часто преподаватели провокационно спрашивают, а какие значения может принимать step? Может ли он быть отрицательным? Дробным? Вот ответы на эти вопросы. Шаг может быть любым вещественным числом, за исключением нуля, иными словами, и целым, и дробным, и отрицательным. Но отрицательным он может быть только в случае, если начальное значение параметра больше конечного, т. е. когда мы идем от большего к меньшему. Например, тот же оператор цикла из примера про мишень с тем же результатом можно было бы записать и так:
FOR R=60 TO 20 STEP -10: CIRCLE (320, 175), R, 14: NEXT R
Кроме того, если шаг изменения параметра равен единице, то при написании оператора цикла его можно опускать, например:
FOR №-12 ТО 24 STEP 1
Можно было бы записать просто:
FOR W=12 TO 24
Но это не касается минус единицы!