ГЛАВА 3. ЦИКЛИЧЕСКИЕ СТРУКТУРЫ.




Понятие цикла.

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

Задача.

Вывести на экран квадраты первых N натуральных чисел.

Разберем решение задачи, например, для N=5.

CLS

PRINT 1^2

PRINT 2^2

PRINT 3^2

PRINT 4^2

PRINT 5^2

END

Для небольших значений N написать и набрать эту программу не составит труда — можно воспользоваться копированием и вставкой строк, а потом только исправить числа. Но представьте себе в какого “монстра” превратится эта программа, если нам придется писать ее для N=1000!

Как же быть? Оказывается все очень просто. Внимательно рассмотрев программу, мы увидим, что 5 раз повторяется один и тот же оператор, отличие только в том, что каждый раз вычисляется квадрат числа на единицу больше предыдущего.

Таким образом при многократном повторении одних и тех же действий речь может идти о цикле. А что такое цикл? Когда Вы говорите о человеке — “зациклился”? Когда он много-много раз говорит об одном и том же или делает одно и то же.

Итак,

ЦИКЛ — это многократное повторение одних и тех же действий.

Цикл в общем виде должен содержать:

1. Установку начальных значений переменных цикла.

2. Тело цикла — действия, повторяемые многократно.

3. Изменение переменных цикла.

4. Проверку условия окончания (продолжения) цикла.

5. В случае выполнения условия продолжения цикла, переход к пункту 2.

 

В данном пособии мы рассмотрим две циклические структуры — счетный цикл FOR... NEXT и цикл “пока” WHILE... WEND.

 

Счетный цикл FOR...NEXT.

Общий вид:

FOR V счетчик = нач.знач. V TO V кон.значение V STEP V шаг

ТЕЛО ЦИКЛА

NEXT V счетчик

где счетчик — это имя переменной, изменяющейся в цикле;

нач.значение и кон.значение — числовые константы;

шаг изменения — числовое значение, определяющее величину изменения переменной цикла при последующем исполнении.

Служебное слово FOR называют заголовком цикла, NEXT — концом цикла.

Оператор FOR...NEXT выполняется следующим образом:

1) Переменной цикла присваивается начальное значение.

2) Проверка допустимости значения переменной цикла, т.е. не превышает ли оно конечного Если не превышает, то переход к п.3, иначе — конец цикла и переход на оператор, следующий за оператором NEXT.

3) Выполняются операторы тела цикла.

4) Переменная цикла получает новое значение, измененное на величину шага.

значения.

Итак, как же должна выглядеть наша программа?

Так как число n заранее неизвестно, используем ввод с клавиатуры INPUT.

CLS:REM Очистка экрана

INPUT “n=“;N:REM Ввод числа n пользователем

FOR I=1 TO n STEP 1:REM Организация цикла

PRINT I^2:REM Тело цикла

NEXT I:REM Конец цикла

END

ПОЯСНЕНИЕ: I — переменная цикла, которое будет изменяться от 1 до n. Тело цикла — вывод на печать квадрата переменной цикла.

 

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

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

1) Переменные циклов должны иметь разные имена.

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

Например, нижеприведенная программа выводит на экран таблицу умножения:

FOR I=1 TO 9 STEP 1

. FOR J=1 TO 9 STEP 1

.. PRINT I; ”*”;J;”=“;I*J

. NEXT J: PRINT

NEXT I

 

Решение задач.

Задача 1.

Нарисовать “Кремлевскую стену”:

0 х


Примечание: Возьмем высоту и ширину фрагмента 20 пикселей.

Прежде, чем начать писать программу, вынесите повторяющийся фрагмент на лист в клетку и расставьте координаты.

x,y-20 x+20,y-20

 

 


x+10,y-10

 

 

x,y x+20,y x+30,y

SCREEN 9:COLOR 7,2: CLS

Y= 40

FOR X=1 TO 300 STEP 30

LINE(X,Y)-(X,Y-20)

LINE - (X+10,Y-10)

LINE - (X+20,Y-20)

LINE - (X+20,Y)

LINE - (X+30,Y)

NEXT X

END

пояснение: Повторяющийся фрагмент, тело цикла, выделен на рисунке пунктирной окружностью. Расставив координаты на фрагменте, легко написать операторы, рисующие его. Осталось установить область изменения переменной цикла Х и шаг изменения. Так как длина фрагмента 30, то и шаг изменения будет 30, а Х изменяется в графическом режиме от 1 до 300. Значение Y можно выбрать самим.

Задача 2.

Подсчитать N! (факториал числа N), то есть произведение первых N натуральных чисел. Число N ввести с клавиатуры.

ПОЯСНЕНИЕ. Для подсчета нам необходимо завести переменную памяти, в которой будут “накапливаться” произведения. Пока она не задействована, ей присваивают значение 1. Переменная цикла будет последовательно принимать значения натуральных чисел от 1 до N. В теле цикла ячейке-”копилке” будут присваиваться произведения ее старого значения на переменную цикла.

CLS

INPUT “Введите натуральное число: ”;N

P=1

FOR I=1 TO N STEP 1

P=P*I

NEXT I

PRINT N; ”! = “; P

END

 

Задача 3.

Подсчитать сумму дробей вида от 1 до n (n ввести с клавиатуры).

ПРИМЕЧАНИЕ. В данной задаче нам тоже понадобится переменная-”копилка”, в которую мы будем складывать дроби. Первоначальное значение переменной должно быть равно 0. Округление произвести с помощью функции USING.

 

СLS

INPUT ‘“Введите натуральное число “; N

S=0

FOR I=1 TO N STEP 1

S=S+ 1/(I+1)

NEXT I

PRINT “ Сумма дробей вида 1/(n+1) для n от 1 до “;N; “равна “;

PRINT USING”##.##”;S

END

Результат для N=4:

Задача 4.

Написать программу переворачивающую слово.

Решение.

CLS

INPUT ‘“Введите слово: “;B$

A$=“”

FOR I= LEN(B$) ТО 1 STEP -1

A$=A$+ MID$(B$, I, 1)

NEXT I

PRINT “Перевернутое слово — “; A$

END

 

§ 11.4 Программирование динамического элемента.

Задача 1.

Нарисовать на графическом экране 15 прямоугольников с координатами диагонали (20,20) и (80, 100), закрашенных во все цвета от 1 до 15.

Решение:

CLS: SCREEN 9:REM Графический режим

FOR I=1 TO 15 STEP 1:REM Заголовок цикла

LINE (20,20) - (80, 100), I, BF:REM Закрашенный пр-к цвета I

NEXT I:REM Конец цикла

END

Пояснение: Переменная цикла I изменяется от 1 до 15 и является номером цвета в операторе LINE. Тело цикла — рисование закрашенного прямоугольника цветом I, с координатами диагонали (20,20) и (80, 100).

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

Например: FOR I=1 TO 1000 STEP 1: NEXT I

ВНИМАНИЕ! Имя переменной цикла не должно совпадать ни с каким другим именем программы!

Задержку вставляют в тело цикла, например, между операторами LINE и NEXT. Программа примет вид:

CLS: SCREEN 9:REM Графический режим

FOR I=1 TO 15 STEP 1:REM Заголовок цикла

LINE (20,20) - (80, 100), I, BF:REM Закрашенный пр-к цвета I

FOR J=1 TO 300: NEXT J:REM ЗАДЕРЖКА

NEXT I:REM Конец цикла

END

Так же в качестве задержки используют оператор SLEEP N, где N — время в секундах.

 

Разберем задачу:

Задача 2.

Написать программу движения закрашенного прямоугольника слева направо по экрану.

Напишем алгоритм.

1. Нарисовать закрашенный прямоугольник в месте начала движения.

2. Нарисовать левую сторону прямоугольника цветом фона.

3. Нарисовать линию на 1 пиксел правее прямоугольника цветом прямоугольника.

4. Повторять пункты 2 и 3 до тех пор, пока прямоугольник не достигнет правого края экрана.

 

 

SCREEN 9: CLS

X=1: Y=10:REM установка левого верхнего угла пр-ка

LINE(X,Y) - (X+50, Y+30), 5, BF:REM пункт 1

FOR X=1 TO 320 STEP 1:REM заголовок цикла

LINE(X,Y)-(X,Y+30), 0:REM пункт 2

LINE(X+50,Y)-(X+50,Y+30), 5:REM пункт 3

FOR J=1 TO 300: NEXT J:REM задержка

NEXT X:rEM конец цикла

END

 

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

 

Задача 3.

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

Алгоритм.

1. Задать Rmax.

2. Нарисовать окружность единичного радиуса.

3. Нарисовать окружность на 1 пиксел больше.

4. Повторять пункт 3 до тех пор, пока радиус не станет больше Rmax.

 

SCREEN 9: CLS:REM графический режим, очистка экрана

INPUT “Rmax=“;Rmax:REM ввод Rmax

FOR R=1 TO Rmax STEP 1:REM пункты 2-4

CIRCLE (150, 100), R, 9:REM рисование окружности радиусом R

FOR I=1 TO 300:NEXT I:REM задержка

NEXT R:REM конец цикла

END

 

Цикл “ ПОКА ” — WHILE... WEND.

Если в счетном цикле FOR... NEXT число повторений фиксировано, то цикл WHILE... WEND используют в том случае, если количество повторений заранее неизвестно, но известно условие, определяющее конец работы цикла.

ОБЩИЙ ВИД:

WHILE V УСЛОВИЕ

ТЕЛО ЦИКЛА

WEND



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: