Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

1.7. Циклы

Ц икл

Заголовок цикла и конец цикла образуют своеобразные "операторные

скобки", которые, собственно, и определяют тип цикла.

а) Безусловный цикл: заголовок

конец

b) Цикл пересчета имеет сложный заголовок:

[ ]

конец

c) Цикл с предусловием

заголовок

while ‹ усл. ›

do while ‹ усл. ›

do

конец

Wend

loop

loop while ‹ усл. ›

d) Цикл с постусловием

заголовок

do until ‹ усл. ›

Do

конец

loop

loop until ‹ усл. ›

Выход из цикла можно осуществить с помощью оператора EXIT

с указателем типа цикла, т.е. EXIT DO или EXIT FOR.

Циклы помогают организовать паузы, например:

FOR i = 0 TO n : NEXT или

WHILE INKEY$ = "" : WEND (пауза пока не нажата любая

клавиша). Аналогично можно организовать при необходимости опрос

клавиатуры (см. примеры ниже).

Пример 1. Найдем наименьшее натуральное число, синус которо-го по абсолютной величине не превосходит 0.001:

DEF INT I : DEFSNG E, S

i = 0 : eps = 0.001 : s = 1

WHILE s => eps

i = i + 1 : s = ABS(sin(i))

WEND : PRINT "i = " ; i ; "; sin(i) = " ; sin(i)

Пример 2. Пусть введено произвольное положительное число . По опросу клавиатуры следует либо сгенерировать случайное число из промежутка (-5, 5), либо прекратить работу программы. Работа должна прекратиться и в том случае, когда сумма случайных чисел превзойдет

число . Задачу можно решить с помощью кода:

DEFSNG M-S

DEFSTR T 'предопределение типов

RANDOMIZE TIMER

INPUT "Введите число mu ", mu: sum = 0

DO: t = "": WHILE t = "": t = INKEY$: WEND 'опрос клавиатуры

IF ASC(t) = 27 THEN 'выход (Esc)

PRINT "Работа закончена": END

END IF

sum = sum + 10 * RND – 5

IF sum > mu THEN

PRINT "Перебор": END

LOOP

Циклы удобно использовать при анализе текстовой информа-ции (см. примеры 3 - 5 ).

Пример 3. Составить программу, определяющую по опросу кла-виатуры, есть ли в скрытом тексте символ, соответствующий нажатой клавише. Здесь полезно использовать некоторые коды служебных

клавиш, как, например, 13 – код "Enter", 27 – код "Escape" и др.

DEFSTR S-T 'предопределение типов

txt = " … ": st = UCASE$(txt) 'верхний регистр

s = "": WHILE s = "": s = INKEY$: WEND 'опрос клавиатуры

IF ASC(s) = 27 THEN END 'выход по ESC

IF INSTR(1, st, UCASE$(s)) = 0 THEN PRINT "символа нет" ELSE PRINT "есть"

Аналогично, если необходимо опознать пароль, то код можно ор-

ганизовать следующим образом (parole – переменная, содержащая

скрытый текст):

DEFSTR S-T

DEFINT J-K 'предопределение типов

j = 0: k = 1 'признак совпадения пароля

DO: s = "": WHILE s = "": s = INKEY$: WEND 'опрос клавиатуры

IF ASC(s) = 27 OR ASC(s) = 13 THEN EXIT DO 'выход из цикла

j = j + 1: PRINT "*";

IF s <> MID$(parole, j, 1) THEN k = 0 'проверка символа

LOOP : if LEN(parole) <> j THEN k = 0

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]