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

Опубликовано: 2018-05-13 08:00:00

Оператор цикла WHILE...WEND

Если в счетном цикле FOR ... NEXT число повторений фиксировано, то цикл WHILE...WEND используют в том случае, если количество повторений заранее неизвестно, но известно условие, определяющее конец работы цикла.

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

Общий вид оператора:

WHILE <условие>
оператор_1
оператор_2
...
оператор_N
WEND

где:

Если условие имеет значение TRUE, то выполняется оператор(ы) в теле цикла, после чего повторяется проверка условия. Если условие имеет значение FALSE, то оператор WHILE...WEND прекращает свою работу.

Разберём на примере:


  1. I = 0
  2. WHILE (I < 10) 'zadayem usloviye
  3.   I = I + 1 'esli usloviye podkhodit to pribavlyayem 1
  4.   PRINT I 'vyvodim rezultat
  5. WEND 'zavershayem operator WHILE

Рисунок 1 – Использование оператора цикла с предусловием

Рисунок 1 – Использование оператора цикла с предусловием

Рисунок 2 – Выполнение оператора цикла с предусловием

Рисунок 2 – Выполнение оператора цикла с предусловием

Неплохо. Попробуем запрограммировать то же самое через GOTO (этот способ не рекомендуется, позже объясню почему).


  1. I = 0 'zadayem znacheniye
  2. M: 'ukazyvayem metku
  3. I = I + 1 'pribavlyayem k znacheniyu 1
  4. PRINT I 'vyvodim na ekran znachene
  5. IF I < 10 THEN GOTO M 'esli I menshe 10 vozvrashchayemsya k metke M

Рисунок 3 – Плохой стиль программирования

Рисунок 3 – Плохой стиль программирования

Рисунок 4 – Результат выполнения цикла при помощи GOTO

Рисунок 4 – Результат выполнения цикла при помощи GOTO

Почему не рекомендуется использовать оператор GOTO?

Программа должна быть красива как снаружи, так и внутри. Когда у вас огромный код, GOTO может принести очень много неприятных моментов, делает код трудно читабельным и к тому же приводит к созданию так называемого «спагетти-кода». А поскольку GOTO  можно легко заменить, то предпочитают его не использовать.

Задача. Вычислить квадратный корень числа, введеный с клавиатуры.

Примечание к задаче: квадратный корень вычисляется только из неотрицательного числа, поэтому необходимо организовать в программе проверку ввода.


  1. INPUT "VVEDITE CHISLO: "; N
  2. WHILE (N < 0)
  3.   PRINT "OSHIBKA! POVTORITE VVOD!"
  4.   INPUT "VVEDITE CHISLO: "; N
  5. WEND
  6. PRINT "KOREN' ETOGO CHISLA RAVEN: "; SQR(N)

Рисунок 5 – Пример вычисление корня

Рисунок 5 – Пример вычисление корня

Рисунок 6 – Результат нахождения корня

Рисунок 6 – Результат нахождения корня

Ещё хотелось бы сказать, что оператор цикла WHILE...WEND иногда удобно использовать для ожидания нажатия клавиши.

С помощью инструкции INKEY$ удобно создавать задержку в программе до нажатия клавиши. Это можно записать, например, так:


  1. WHILE INKEY$ = ""
  2.   'TELO PROGRAMMY
  3. WEND

Рисунок 7 – Пример использования инструкции INKEY$

Рисунок 7 – Пример использования инструкции INKEY$

Рисунок 8 – Пример выполнения инструкции INKEY$

Рисунок 8 – Пример выполнения инструкции INKEY$

Программа будет просто ожидать нажатия любой клавиши с клавиатуры.

Решим ещё одну задачку (перед тем как увидеть ее решение, попробуйте выполнить ее самостоятельно). Найти сумму чисел от 1 до 100  используя цикл WHILE....WEND.


  1. S = 0
  2. I = 1
  3. WHILE (I <= 100)
  4.   S = S + I
  5.   I = I + 1
  6. WEND
  7. PRINT S

Рисунок 9 – Нахождение суммы чисел при помощи цикла WHILE...WEND

Рисунок 9 – Нахождение суммы чисел при помощи цикла WHILE...WEND

Рисунок 10 – Результат нахождения суммы чисел при помощи цикла WHILE...WEND

Рисунок 10 – Результат нахождения суммы чисел при помощи цикла WHILE...WEND

Решим еще одну задачу.

Задача. Дано натуральное число N. Определить произведение всех цифр этого числа:


  1. N = 1234
  2. P = 1
  3. WHILE N
  4.   P = P * (N MOD 10)
  5.   N = N \ 10
  6. WEND
  7. PRINT P

Рисунок 11 – Произведение всех цифр заданного числа

Рисунок 11 – Произведение всех цифр заданного числа

Рисунок 12 – Результат произведения всех цифр заданного числа

Рисунок 12 – Результат произведения всех цифр заданного числа

В следующих статьях мы поговорим про алгоритм Евклида и про обработку массивов при помощи циклов.

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

 

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

< Предыдущая статья
Группировка цикла FOR...NEXT c массивами
Следующая статья >
Обработка массива при помощи FOR...NEXT

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