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

Но это не касается минус единицы!
Использование оператора цикла очень наглядно в графике (хотя это, как раз, не главное применение данного очень полезного инструмента). Поэтому, давайте освоим правила управления оператором цикла, выполнив несколько упражнений.
137. Напишите программу, рисующую на экране горизонтальную линию, состоящую из точек, расстояние между которыми 8 (рис. 1.35).

Рис.1.35. Горизонтальная линия из точек

138. Заполните экран горизонтальными линиями (через 10), а затем, с помощью еще одного оператора цикла, вертикаль ными линиями другого цвета (тоже через 10). Должна получиться решетка, как на рис. 1.36.

Рис.1.36. Решетка

Рис. 1.37. Пешеходный переход "зебра"

139. Нарисуйте пятиконечную звезду, вписанную в окружность, как на рис. 1.25. Используйте для рисования и закраски операторы цикла.
140. Постройте пешеходный переход — "зебру", как на рис. 1.37.
141. Нарисуйте фантастический глаз, как на рис. 1.38.

Рис. 1.38. Фантастический глаз

Рис. 1.39. Взрыв сверхновой

142. Изобразите взрыв сверхновой звезды (если это задание делать по-простому, то понадобится четыре оператора цикла, можно сложнее — но и короче). Сделайте лучи во всех четырех случаях разного цвета. Это придаст живости (рис. 1.39).
143. Заставьте окружность надуваться как воздушный шарик.
144. Мы уже перемещали по экрану геометрические фигуры с использованием условного оператора и оператора безусловного перехода. Теперь наши фигуры будут двигаться равномерно по вертикали или горизонтали. Сместите:

  • закрашенный прямоугольник;
  • закрашенную окружность.

Все это замечательно. Но давайте вспомним, что Бейсик — все-таки язык в большой степени не графический, а вычислительный, и попробуем применить оператор цикла к вычислениям.
Например, напечатать значения y = sinx в интервале [-30°; 30°]
с шагом 5°. Действуя по правилам, несложно понять, что параметр — это х, так мы его и обозначим. Начальное, конечное значения параметра и шаг указаны непосредственно в самом задании. Пишем оператор цикла:

OR X=-30 ТО 30 STEP 5
Y=SIN (X*3.14/180)
? "SIN С; X; ")="; Y NEXT X

На что, кроме оператора цикла, здесь хочется обратить ваше внимание, так это на оператор print. Разберитесь, пожалуйста, как он работает, и что дает такая, казалось бы, запутанная запись.
Еще пример. Необходимо вывести на экран четные числа от 2 до 20. Здесь меняется само число, обозначаем его N, начальное значение 2, конечное 20, шаг 2. Пишем:

FOR N=2 ТО 20 STEP 2: ? N: NEXT N

А если от 20 до 2, то будет, соответственно:

FOR N=20 ТО 2 STEP -2: ? N: NEXT N

Проверим ваше понимание, как всегда, при помощи ряда заданий.
145. Выведите на экран в строку все числа первой сотни, оканчивающиеся на пять.
146. Определите значение переменной f после выполнения следующих операторов:

F=l: N=l
FOR 1=2 ТО N: F=F+1/I: NEXT I

147. Напишите программу, запрашивающую возраст пользователя, а затем печатающую текст "Да ты крут!" по числу прожитых лет. Обратите внимание, что здесь в теле цикла не будет использоваться параметр. Такое тоже возможно.
148. С клавиатуры запрашивается любая цифра от 2 до 9, а затем компьютер печатает таблицу умножения на эту цифру.
149. Напишите программу., выводящую на экран степени числа 2 от 2 до 10 включительно.
150. Распечатайте в табличном виде (с аргументами) значение функции квадратного корня на интервале [2; 4] с шагом 0,1.
151. Напишите программу, которая в центре чистого экрана на одном и том же месте выведет последовательно цифры от 1 до 3600 (аналог электронного секундомера).
Когда мы двигали геометрические объекты, го нам приходилось иногда искусственно замедлять движение, чтобы оно было более плавным. Тогда без объяснений был введен пустой цикл для организации пауз. Пустым будем называть такой цикл, в котором нет тела. Например:

FOR 1=1 ТО 100: NEXT I

Просто компьютер считает в уме до 100. А мы его ждем (ну, правда, если до 100 — это быстро, а вот до 10 000 уже придется |и потерпеть).
Следующая группа упражнений поможет вам закрепить работу с оператором цикла в графике на примере орнаментов. Сначала рассмотрим пример.
Орнамент — это повторяющийся геометрический узор, например, как на рис. 1.40.

Рис.1.40. Орнамент

Правила построения орнаментов:

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

152. Напишите программу для рисования орнамента (рис. 1.40).
153. Закрепите успех, написав программу для построения греческого орнамента (рис. 1.41).

Рис.41. Греческий орнамент

Рис.1.42. Буратино

154. Когда мы изучали операторы data и read, to мы говорили, что используем их при изучении оператора цикла. Этот час пробил. Задав в операторе data координаты всех точек концов отрезков, из которых состоит рис. 1.42, напишите программу, рисующую Буратино при помощи оператора цикла.

Совет
При рисовании непрерывной ломаной линии применяется сокращенная форма оператора line, а именно: line -(х, Y), с. То есть линия будет рисоваться от последней графической точки на экране до точки с координатами X, у. Поэтому при выполнении предыдущего задания рекомендуется поставить первую точку оператором pset, а затем в цикле считывать поочередно координаты следующих точек и рисовать отрезки при помощи сокращенной формы оператора line.


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