Лекция 6 Оператор цикла с предусловием WHILE UNTIL

Лекция 6 Оператор цикла с предусловием

Если число повторений, выполняемых в цикле, заранее не известно или шаг приращения счетчика (параметра) цикла отличен от единицы, то необходимо использовать оператор цикла с предусловием. Этот оператор цикла имеет две разновидности:

DOWHILE условиеОператор LoopDOUNTILусловиеОператор Loop

где условие — это логическое выражение, от значения которого зависит- продолжать повторы или завершить цикл; оператор — любой оператор или блок операторов. Выполнение цикла начинается с проверки истинности условия, записанного в заголовке. В зависимости от истинности или ложности условия выполняется оператор, входящий в цикл.В варианте цикла DOWHILE операторы внутри цикла выполняются в случае истинности заданного условия. Затем начинается очередной виток цикла и условие вновь проверяется. В варианте цикла DOUNTIL операторы внутри цикла выполняются в случае, если заданное условие ложно.

Таким образом, операторы цикла DO WHILE и DO UNTIL устроены противоположным друг другу образом: первый работает, пока условие истинно, второй – работает, пока условие ложно. Поскольку в цикле типа DO WHILE и DO UNTIL условие завершения повторов проверяется до выполнения входящего в него оператора, такой цикл называется «оператор цикла с предусловием». Пример использования оператора цикла с предусловием:

Option Explicit Sub

Primer1( )

Dim N, Sum As Byte

N=VAL(InputBox("N=",«Вводите числа, для окончания -ноль »,""))

Sum=N DO WHILEN<>0

N=VAL(InputBox("N=",«Вводите числа, для окончания -ноль »,""))

Sum=Sum+N

LOOP MsgBox «Sum= „+ STR(Sum) EndSub

Тот же пример, но с использованием второй формы оператора с предусловием

Option Explicit Sub Primer2( )

Dim N, Sum As Byte

N=VAL(InputBox(“N=»,«Вводите числа, для окончания -ноль »,""))

Sum=N DO UNTILN=0

N=VAL(InputBox("N=",«Вводите числа, для окончания -ноль »,""))

Sum=Sum+N LOOP

MsgBox «Sum= „+ STR(Sum) EndSub

Как видно из представленных выше примеров, смена оператора цикла DO WHILE на DO UNTIL потребовала изменения логики задаваемого в заголовке условия: вместо операции сравнения “не равно» пришлось записать «равно».

Оператор цикла с постусловием

Цикл этой разновидности также применяется в случаях, когда число повторений заранее не известно. Этот тип оператора цикла похож на цикл с предусловием, но в данном случае условие завершения повторов проверяется после выполнения операторов, входящих в цикл. Существует два вида операторов цикла с постусловием:

DOОператор LoopWHILE условиеDOОператор LoopUNTILусловие

Оператор цикла с постусловием начинается с выполнения операторов внутри цикла. Затем проверяется истинность логического условия, стоящего после слов WHILE и UNTIL. Примеры программы, использующей оператор цикла с постусловием:

Option Explicit Sub

Primer3( )

Dim N, Sum As Byte

Sum=0

DO N=VAL(InputBox("N=",«Вводите числа, для окончания -ноль »,""))

Sum=Sum+N LOOP

WHILEN<>0

MsgBox «Sum= „+ STR(Sum) End Sub

Option Explicit Sub

Primer4( )

Dim N, Sum As Byte

Sum=0

DO N=VAL(InputBox(“N=»,«Вводите числа, для окончания -ноль »,""))

Sum=Sum+N

LOOP UNTIL

N=0 MsgBox «Sum= „+ STR(Sum) End Sub

При использовании операторов цикла следует учитывать, что операторы, входящие в цикл с постусловием DO…Loop…WHILE или DO…Loop…UNTIL, всегда выполняются хотя бы один раз, поскольку истинность логического выражения в цикле этого типа проверяется после операторов, входящих в тело цикла. В то время как при использовании цикла с предусловием DO…WHILE...Loop и DO…UNTIL…Loop возможна ситуация, когда операторы, входящие в цикл, не будут выполнены ни разу.

Досрочное принудительное завершение цикла

Циклы с предусловием и постусловием завершаются по результатам проверки условия, стоящего после служебных слов WHILE или UNTIL. Между тем, цикл может быть досрочно прекращён изнутри операторов, входящих в тело цикла. Для этого можно использовать команду EXIT DO. DO Оператор ExitDo Оператор LoopWHILE условие Пример использования принудительного завершения цикла:

Option Explicit Sub

Primer5( )

Dim S As String, A, B As Byte

DO S=InputBox(“»,«Введите число, окончание- ноль»,"")

SELECT CASE S

CASE «0» TO «9» A=VAL(S)

B=A^2 MsgBox «Квадрат числа равен= „+STR(B) CASE ELSE MsgBox “Ошибка ввода, это не число»

Exit

Do

End Select Loop UNTIL S=«0» End Sub

Опасность возникновения бесконечного цикла

Одной из опасностей, возникающих при использовании оператора цикла, является «зацикливание», т.е. возникновение ситуации, когда программа не выходит из цикла, бесконечно повторяя входящие в него операторы: K=1 DOWHILEK<5 MsgBox«Бесконечный цикл» Loop Если в программе встретится такой фрагмент, то на экран будет бесконечно выводиться диалоговое окно с фразой «Бесконечный цикл». Это будет длиться до тех пор, пока пользователем не будут выполнены действия по принудительному завершению работы программы. Вывести программу из бесконечного цикла можно, нажав сочетание клавиш “CTRL”, “ALT” и «DEL», после чего на экране появиться окно Диспетчера задач Windows, в котором перечисляется список выполняемых в настоящий момент на компьютере программ. Следует кликнуть мышью в списке по имени выполняемого макроса и нажать кнопку «Снять задачу», а в появившемся затем новом окне нажать кнопку «Завершить сейчас». Спустя несколько секунд программа EXCEL с «зависшим» макросом будет выгружена из оперативной памяти и можно будет продолжить работу на компьютере. Зацикливания не произойдет, если операторы, входящие в цикл, будут влиять на условие, управляющее завершением цикла: K=1 DO WHILE K<5 MsgBox "Цикл" K=K+1 Loop В этом фрагменте цикл выполнится ровно 4 раза и компьютер перейдет к следующим командам. Остановить выполняемую программу, не выходя из Visual Basic можно, нажав на клавиатуре одновременно CTRL и Pause/Break.

314
RSS
Нет комментариев. Ваш будет первым!
Загрузка...
Этот сайт использует файлы cookies, чтобы облегчить вам пользование нашим веб-сайтом. Продолжая использовать этот веб-сайт, вы даете согласие на использование файлов cookies. Подробнее о том, как мы пользуемся файлами cookies и как ими управлять, вы можете узнать нажав на ссылку ниже.