Иллюстрированный самоучитель по Basic, вводный курс

Циклический алгоритм. Оператор с заранее известным числом повторений.

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


Когда мы работали с графикой, то в одном из заданий вам предлагалось построить мишень – пять концентрических окружностей. Мы это легко сделали, пять раз написав оператор построения окружности 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

Но это не касается минус единицы!

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.