QBASICBOOK.ru: сайт про QB64

Опубликовано: 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. Не верите? Проверьте.

Для примера сложим числа от 1 до 100.

Пример с DO...LOOP...WHILE:


  1. PRINT "SLOZHENIE DO 100"
  2. SUM = 0
  3. DO
  4.     INPUT "VVEDITE CHISLO: ", A
  5.     SUM = SUM + A
  6. LOOP WHILE (SUM < 100)
  7. PRINT SUM

Рисунок 1 – Пример использования DO...LOOP...WHILE

Рисунок 1 – Пример использования DO...LOOP...WHILE

Рисунок 2 – Результат выполнения DO...LOOP...WHILE

Рисунок 2 – Результат выполнения DO...LOOP...WHILE

Пример той же задачи с DO...LOOP...UNTIL:


  1. PRINT "SLOZHENIE DO 100"
  2. SUM = 0
  3. DO
  4.     INPUT "VVEDITE CHISLO: ", A
  5.     SUM = SUM + A
  6. LOOP UNTIL (SUM >= 100)
  7. PRINT SUM

Рисунок 3 – Пример использования DO...LOOP...UNTIL

Рисунок 3 – Пример использования DO...LOOP...UNTIL

Рисунок 4 – Результат выполнения DO...LOOP...UNTIL

Рисунок 4 – Результат выполнения DO...LOOP...UNTIL

Мы рассмотрели самые базовые примеры на оператор DO...LOOP. Попробуйте разобрать задачи ниже самостоятельно. Некоторые операторы в этих задачах мы не рассматривали ранее, если задачи покажутся вам пока сложными, вернитесь к ним попозже.

Рассмотрим сложный пример.

Задача. Написать программу, которая печатает пример столбиком на деление с остатком двух заданных натуральных чисел.


  1. INPUT "DELIMOE: ", A 'CHTO DELIM
  2. INPUT "DELITEL: ", B 'NA CHTO DELIM
  3. N = 5 'NOMER STROKI DLYA VYVODA NA PECHAT
  4. M = 4 'NOMER STOLBTSA DLYA VYVODA NA PECHAT
  5. LOCATE N, M
  6. PRINT A; ":"; B
  7. A1 = A ' KOPIYA CHISL (BUDEM YEYE LOMAT)
  8. DO
  9.     F = F + 1 ' FLAZHOK DLYA REZULTATA
  10.     C = A1 \ B 'REZULTAT
  11.     K = 1 'KOEFFITSIYENT DLYA UMNOZHENIYA
  12.     DO WHILE C > 9
  13.         'OCHEREDNAYA TSIFRA REZULTATA (UMENSHAYEM REZULTAT POKA NE POLUCHIM TSIFRU)
  14.         C = C \ 10
  15.         K = K * 10 'UVELICHIVAYEM KOEFFITSIYENT
  16.     LOOP
  17.     N = N + 1 'MENYAYEM STROKU I STOLBETS PECHATI
  18.     LOCATE N, M
  19.     PRINT "-"; B * C;
  20.     IF F = 1 THEN PRINT "    "; A \ B ELSE PRINT
  21.     A1 = A1 - B * C * K 'PROMEZHUTOCHNYY OSTATOK
  22.     A2 = A1
  23.     DO WHILE A2 \ B > 10
  24.         'UMENSHAYEM PROMEZHUTOCHNYY OSTATOK - SNESENNYYE TSIFRY DELIMOGO
  25.         A2 = A2 \ 10
  26.     LOOP
  27.     N = N + 1
  28.     M = M + 1
  29.     LOCATE N, M
  30.     PRINT A2
  31. LOOP UNTIL A1 < B
  32. PRINT "RESULT="; A \ B

Рисунок 5 – Решение задачи на деление с остатком двух заданных натуральных чисел

Рисунок 5 – Решение задачи на деление с остатком двух заданных натуральных чисел

Рисунок 6 – Результат выполнения задачи на деление с остатком двух заданных натуральных чисел

Рисунок 6 – Результат выполнения задачи на деление с остатком двух заданных натуральных чисел

Задача. Вывести таблицу служебных кодов ASCII по нажатию клавиши.


  1. DO
  2.     KB$ = INKEY$
  3.     IF (KB$ <> ""THEN
  4.         IF LEFT$(KB$, 1) = CHR$(0) THEN
  5.             LOCATE , 20
  6.             PRINT "INKEY$ = CHR$(0) + CHR$(";
  7.             PRINT LTRIM$(STR$(ASC(RIGHT$(KB$, 1)))); ")"
  8.             PRINT
  9.         ELSE
  10.             LOCATE , 20
  11.             PRINT "INKEY$ = CHR$("; LTRIM$(STR$(ASC(KB$))); ")"
  12.             PRINT
  13.         END IF
  14.     END IF
  15. LOOP UNTIL (KB$ = CHR$(27))

Рисунок 7 – Решение задачи на поиск кода ASCII

Рисунок 7 – Решение задачи на поиск кода ASCII

Рисунок 8 – Результат выполнения задачи на поиск кода ASCII

Рисунок 8 – Результат выполнения задачи на поиск кода ASCII

Задача. Дана последовательность N-целых чисел, заканчивающихся 0. Определить является ли она возрастающей.


  1. DO
  2.     N = N + 1
  3.     PRINT "VVEDITE CHISLO N" + CHR$(248); N;
  4.     INPUT ": ", C
  5.     IF C = 0 THEN EXIT DO
  6.     IF N > 1 AND C <= OC THEN NEVOZ = 1
  7.     OC = C
  8. LOOP
  9. IF NEVOZ THEN PRINT "NE ";
  10. PRINT "VOZRASTAUSHAJA POSLEDOVATELNOST"

Рисунок 9 – Решение задачи задачи на определения возрастающей последовательности

Рисунок 9 – Решение задачи задачи на определения возрастающей последовательности

 Рисунок 10 – Результат выполнения задачи на определения возрастающей последовательности

Рисунок 10 – Результат выполнения задачи на определения возрастающей последовательности

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Решение задач на принадлежность отрезку при помощи составных условий
Следующая статья >
Решение диалоговых задач

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.