Урок 7.
ЦИКЛИЧЕСКИЕ АЛГОРИТМЫ
При написании программы может возникнут необходимость повторить заданную
группу инструкций несколько раз. Пусть, например, нужно нарисовать на
экране сетку из 13 линий.
Конечно, можно написать в программе 13 операторов
LINE, но это слишком долго, а если потом мы захотим изменить размеры
сетки или количество линий в ней, то это, в свою очередь, будет очень
сложно и неудобно. В подобных случаях проще воспользоваться конструкциями
цикла. В языке Basic есть несколько конструкций цикла
для повторения заданной группы операторов.
Рассмотрим их по-порядку:
Цикл FOR-NEXT
FOR счетчик=начало ТО конец [ STEP шаг ]
операторы
NEXT счетчик
Эта конструкция предназначена для многократного
выполнения операторов, расположенных между строками FOR и NEXT.
Для определения того, сколько раз повторять эти операторы, служит счетчик
цикла. Счетчик — это переменная, которой в начале выполнения цикла
присваивается значение, определяемое выражением начало. Далее операторы,
включенные в цикл, выполняются, и счетчик увеличивается на значение, определяемое
выражением шаг. Если новое значение счетчика не превосходит значения выражения
конец, то опять выполняются операторы и счетчик снова увеличивается на
заданный шаг. Так продолжается до тех пор, пока значение Счетчика не станет
больше значения выражения конец. В этот момент цикл прекращается
и выполняются последующие операторы программы. Если слово STEP
отсутствует, то подразумевается шаг 1.
Итак, при выполнении цикла
FOR K=l ТО 10 STEP 2
• • •
NEXT К
счетчик К будет последовательно принимать значения 1, 3, 5,7,
9, следующее значение 11 уже больше конечного значения 10 и для
К=11 цикл выполняться не будет. Таким образом, данный цикл выполниться
5 раз. Если вместо STEP 2 задать STEP 4, то цикл будет выполнятся
для значений К=1,5,9, т.е. три раза.
Можно задавать отрицательный шаг. Тогда
начальное значение должно быть не меньше конечного и значение
счетчика будет уменьшаться. Так, цикл
FOR M=10 ТО -4 STEP -3
• • •
NEXT M
выполнится для М=10,7,4,1,-2, следующее значение -5 выходит из границ
[-4,10] и для него цикл уже не выполняется.
Чтобы нарисовать сетку, можно с заданным шагом перебирать в цикле координаты,
вдоль которых и рисовать горизонтальные и вертикальные линии.
При этом получится такая программа:
SCREEN 9
REM шаги сетки по х и у
DX=10 : DY=10
REM горизонтальные линии
FOR Y=0 TO 80 STEP DY
LINE (0,Y)-(100,Y), 15
NEXT Y
REM вертикальные линии
FOR X=0 TO 100 STEP DX
LINE (X,0)-(X,80), 15
NEXT X
END
Задавая различные значения DX и DY, можно получать сетки с разным расстоянием
между линиями.
Замечание.
Попробуй задать в это программе DX=7, DY=6.
Сетка получится рваной по краям (подумай, почему так происходит?). Было
бы разумнее задавать количество линий в сетке и шаг между линиями. Для
этого нужна такая программа:
SCREEN 9
REM шаги сетки по х и у
DX=10 : DY=10
REM количество линий
NX=10 : NY=8
REM вычисляем координаты последних линий
LASTX=NX*DX : LASTY=NY*DY
REM горизонтальные линии
FOR Y=0 TO LASTY STEP DY
LINE (0,Y)-(LASTX,Y),15
NEXT Y
REM вертикальные линии
FOR X=0 TO LASTX STEP DX
LINE (X,0)-(X,LASTY),15
NEXT X
END
Напишите программы, которые с помощью циклов
FOR—NEXT выводят на экран подобные рисунки:
Веер линий, Линии
Скользящие по направляющим
Концентрические окружности
“Концентрические” прямоугольники
Иногда заранее неизвестно, сколько раз надо
повторить цикл, но известно, что он должен выполняться, пока справедливо
некоторое условие. В таких случаях сложно использовать цикл FOR-NEXT,
но можно применить другую конструкцию цикла.
WHILE условие
операторы
WEND
Смысл этой конструкции совсем прост. Сначала
проверяется условие если оно справедливо, то выполняются операторы,
записанные между строчками WHILE и WEND. После этого опять
проверяется условие и опять выполняются операторы, и так до тех пор, пока
условие не нарушится. При программировании цикла WHILE-WEND
нужно следить, чтобы условие цикла когда-нибудь нарушилось, иначе
этот цикл может никогда не закончить свою работу — программа зациклится.
Типичный пример программы:
А=1
WHILE A>0
А=2
WEND
Здесь А всегда остается равным 2, и неравенство
А>0 всегда оказывается справедливым — цикл продолжается бесконечно.
В циклах FOR-NEXT и WHILE-WEND
много общего. В частности, программу с циклом FOR-NEXT всегда можно
переписать с помощью цикла WHILE-WEND. Так, следующие две программы
делают абсолютно одно и то же.
А=1 FOR 1=1 ТО 10 STEP 2 I=1
A=A+I
NEXT I A=A+I
WHILE I<=10
I=I+2
WEND
Задание.
Напишите программы, которые при использовании
цикла WHILE-WEND выводят на экран подобные картинки.
Каждая следующая прямая отстоит от левой границы экрана в 1,1 раза дальше,
чем предыдущая; цикл продолжается, пока прямые находятся в границах экрана;
Радиусы этих концентрических окружностей изменяются неравномерно.
|