Циклы.

 

Допустим необходимо составить программу подсчитывающих сумму первых пяти чисел.

 

Пример :

 

REM НАХОЖДЕНИЕ СУММЫ ПЯТИ ЧИСЕЛ

INPUT A: REM 1 ЧИСЛО

S = S + A: REM S -СУММА

INPUT A: REM 2 ЧИСЛО

S = S + A

INPUT A: REM 3 ЧИСЛО

S = S + A

INPUT A: REM 4 ЧИСЛО

S = S + A

INPUT A: REM 5 ЧИСЛО

S = S + A

PRINT "СУММА 5 ЧИСЕЛ =";S

Недостатки . Гораздо проще решить эту задачу при помощи операторов цикла :

Операторы FOR и NEXT

 

Операторы FOR и NEXT предназначены для организации циклического выполнения последовательности операторов языка Бейсик заданное число раз.

Синтаксис:

FOR <переменная>= x TO y [STEP z]

...

...

...

NEXT [<переменная>][,<переменная>...]

 

<Переменная> используется в качестве счетчика. Первое числовое выражение (x) задает начальное значение счетчика. Второе числовое выражение (y) определяет конечное значение счетчика. Строки программы, следующие за оператором FOR, будут выполняться до тех пор, пока не будет встречен оператор NEXT. После этого к значению счетчика будет прибавлена величина, определяемая выражением (z) опции STEP. Затем осуществляется проверка с целью определения того, не превысило ли значение счетчика его конечного значения (y). Если этого не случилось, осуществляется переход назад на оператор, который располагается сразу за оператором FOR, и процесс вычисления повторяется. В случае, если значение счетчика превысило конечное значение, выполнение программы продолжается с оператора, следующего непосредственно за оператором NEXT. В случае, если опция STEP не задана, приращение принимается равным единице. Если в опции STEP задано отрицательное значение, значение счетчика каждый раз будет уменьшаться, и цикл будет выполняться до тех пор, пока значение счетчика не станет меньше конечного значения.

Циклы FOR...NEXT могут быть вложенными, т.е. один цикл FOR...NEXT может быть помещен в контексте другого цикла FOR...NEXT.

 

Новая программа будет выглядеть:

FOR I = 1 TO 5

INPUT A

S = S + A

NEXT I

PRINT "СУММА 5 ЧИСЕЛ!”; S

 

Следующая программа выводит цифры от 1 до 10 с шагом 0.1

 

FOR I=1 TO 10 STEP 0.1

PRINT I

NEXT I

 

Следующая программа выводит цифры от 10 до -10 с шагом 0.5

 

FOR I=10 TO -10 STEP -0.5

PRUNT I

NEXT I

 

Кроме одинарны циклов бывают двойные, тройные, и т. д. По другому цикл в цикле.

 

FOR I=1 TO 10

FOR J=1 TO 10 STEP 2

PRINT I,J

NEXT J

NEXT I

 

Задача: Составить программу печатающую таблицу 2N.

 

Решение:

Если переменная N меняется с шагом 1 можно применить цикл N а результата занесем в переменную М.

 

FOR N= 1 TO 21

M = 2 ^ N

PRINT N,M

NEXT N

 

Задача Составить программу печатающую таблицу N!.

 

Решение.

 

Чтобы лучше вникнуть в задачу вычислим первые пять факториалов вручную

 

1!=1

2!=1*2=2

3!=1*2*3=6

4!=1*2*3*4=24

5!=1*2*3*4*5=120

 

Можно заметить что следующий факториал получается умножением своего номера на значение предыдущего факториала. Как и в предыдущей программе принимаем переменные N и M где N отвечает за изменение факториала, а M за вывод результата. Вначале программы переменной М присваиваем значение 1 для того чтобы внутри цикла избавится от умножения на 0 .

 

CLS

M = 1

FOR N = 1 TO 5

M = M * I

PRINT M

NEXT N

 

 

Операторы WHILE...WEND

 

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

Синтаксис:

WHILE<выражение>

.

.

[<операторы цикла>]

.

.

WEND

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

Допускается произвольное число уровней вложенности циклов WHILE/WEND.

 

Задача составить игры угадай число.

a = 78

PRINT "предлагаю угадать число"

WHILE b <> a

INPUT " введите число от 0 до 100"; b

IF a < b THEN PRINT "мое число меньше"

IF a > b THEN PRINT "мое число больше"

WEND

PRINT "угадал"