Урок 6

Меню

Урок 8

Урок 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 раза дальше, чем предыдущая; цикл продолжается, пока прямые находятся в границах экрана; Радиусы этих концентрических окружностей изменяются неравномерно.

    

Урок 6

Меню

Урок 8

Яндекс цитирования Rambler's Top100
Сайт создан в системе uCoz