Опубликовано: 2018-06-13 08:00:00
Оператор цикла DO...LOOP
Операторы DO...LOOP организуют циклическое выполнение группы операторов ограниченных телом цикла DO...LOOP пока (WHILE) или до тех пор, пока (UNTIL) условие продолжение цикла истинно.
Рассмотрим полный синтаксис оператора DO...LOOP.
С постусловием:
DO
...
<операторы>
...
LOOP [{WHILE | UNTIL} <условие_продолжения_цикла>]
С предусловием:
DO [{WHILE | UNTIL} <условие продолжения цикла>]
...
<операторы>
...
LOOP
где:
- <условие_продолжения_цикла> – логическое выражение;
- <операторы> – список выполняемых операторов программы;
- WHILE – если условие выполняется, то выполнить <операторы>, если нет – завершить работу;
- UNTIL – если условие не выполняется, то выполнить <оператор>, иначе завершить работу.
Если рассмотреть этот синтаксис, становится понятно, что если перенести условие продолжения цикла, то в принципе ничего в работе программы не изменится, единственное необходимо подумать что ставить: WHILE или UNTIL. Не верите? Проверьте.
Для примера сложим числа от 1 до 100.
Пример с DO...LOOP...WHILE:
- PRINT "SLOZHENIE DO 100"
- SUM = 0
- DO
- INPUT "VVEDITE CHISLO: ", A
- SUM = SUM + A
- LOOP WHILE (SUM < 100)
- PRINT SUM
Рисунок 1 – Пример использования DO...LOOP...WHILE
Рисунок 2 – Результат выполнения DO...LOOP...WHILE
Пример той же задачи с DO...LOOP...UNTIL:
- PRINT "SLOZHENIE DO 100"
- SUM = 0
- DO
- INPUT "VVEDITE CHISLO: ", A
- SUM = SUM + A
- LOOP UNTIL (SUM >= 100)
- PRINT SUM
Рисунок 3 – Пример использования DO...LOOP...UNTIL
Рисунок 4 – Результат выполнения DO...LOOP...UNTIL
Мы рассмотрели самые базовые примеры на оператор DO...LOOP. Попробуйте разобрать задачи ниже самостоятельно. Некоторые операторы в этих задачах мы не рассматривали ранее, если задачи покажутся вам пока сложными, вернитесь к ним попозже.
Рассмотрим сложный пример.
Задача. Написать программу, которая печатает пример столбиком на деление с остатком двух заданных натуральных чисел.
- INPUT "DELIMOE: ", A 'CHTO DELIM
- INPUT "DELITEL: ", B 'NA CHTO DELIM
- N = 5 'NOMER STROKI DLYA VYVODA NA PECHAT
- M = 4 'NOMER STOLBTSA DLYA VYVODA NA PECHAT
- LOCATE N, M
- PRINT A; ":"; B
- A1 = A ' KOPIYA CHISL (BUDEM YEYE LOMAT)
- DO
- F = F + 1 ' FLAZHOK DLYA REZULTATA
- C = A1 \ B 'REZULTAT
- K = 1 'KOEFFITSIYENT DLYA UMNOZHENIYA
- DO WHILE C > 9
- 'OCHEREDNAYA TSIFRA REZULTATA (UMENSHAYEM REZULTAT POKA NE POLUCHIM TSIFRU)
- C = C \ 10
- K = K * 10 'UVELICHIVAYEM KOEFFITSIYENT
- LOOP
- N = N + 1 'MENYAYEM STROKU I STOLBETS PECHATI
- LOCATE N, M
- PRINT "-"; B * C;
- IF F = 1 THEN PRINT " "; A \ B ELSE PRINT
- A1 = A1 - B * C * K 'PROMEZHUTOCHNYY OSTATOK
- A2 = A1
- DO WHILE A2 \ B > 10
- 'UMENSHAYEM PROMEZHUTOCHNYY OSTATOK - SNESENNYYE TSIFRY DELIMOGO
- A2 = A2 \ 10
- LOOP
- N = N + 1
- M = M + 1
- LOCATE N, M
- PRINT A2
- LOOP UNTIL A1 < B
- PRINT "RESULT="; A \ B
Рисунок 5 – Решение задачи на деление с остатком двух заданных натуральных чисел
Рисунок 6 – Результат выполнения задачи на деление с остатком двух заданных натуральных чисел
Задача. Вывести таблицу служебных кодов ASCII по нажатию клавиши.
- DO
- KB$ = INKEY$
- IF (KB$ <> "") THEN
- IF LEFT$(KB$, 1) = CHR$(0) THEN
- LOCATE , 20
- PRINT "INKEY$ = CHR$(0) + CHR$(";
- PRINT LTRIM$(STR$(ASC(RIGHT$(KB$, 1)))); ")"
- ELSE
- LOCATE , 20
- PRINT "INKEY$ = CHR$("; LTRIM$(STR$(ASC(KB$))); ")"
- END IF
- END IF
- LOOP UNTIL (KB$ = CHR$(27))
Рисунок 7 – Решение задачи на поиск кода ASCII
Рисунок 8 – Результат выполнения задачи на поиск кода ASCII
Задача. Дана последовательность N-целых чисел, заканчивающихся 0. Определить является ли она возрастающей.
- DO
- N = N + 1
- PRINT "VVEDITE CHISLO N" + CHR$(248); N;
- INPUT ": ", C
- IF C = 0 THEN EXIT DO
- IF N > 1 AND C <= OC THEN NEVOZ = 1
- OC = C
- LOOP
- IF NEVOZ THEN PRINT "NE ";
- PRINT "VOZRASTAUSHAJA POSLEDOVATELNOST"
Рисунок 9 – Решение задачи задачи на определения возрастающей последовательности
Рисунок 10 – Результат выполнения задачи на определения возрастающей последовательности
Спасибо за прочтение этой статьи.