пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Оператор цикла с неизвестным числом повторений. Синтаксис, применение, досрочное прекращение, правила использования

 

 

Циклы с условием (неопределенные циклы)

Циклы с условием используются в тех случаях, когда повторяющиеся действия нужно выполнять только при определенных условиях. Количество итераций не определено и в общем случае может быть равно нулю (в частности, для циклов с предусловием). VBA предлагает разработчикам несколько управляющих структур для организации циклов с условием:

  • Четыре вида циклов Do..Loop, которые различаются типом проверяемого условия и временем выполнения этой проверки.
  • Непрерываемый цикл While … Wend.

Цикл Do While … Loop - типичный цикл с предусловием. Условие проверяется до того, как выполняется тело цикла. Цикл продолжает свою работу, пока это <условие> выполняется (т.е. имеет значение True). Так как проверка выполняется в начале, то тело цикла может ни разу не выполниться. Формат цикла Do While … Loop:

	Do While <условие> 
		<блок операторов> 
	Loop 

Оператор Do … Loop While предназначен для организации цикла с постусловием. Условие проверяется после того, как тело цикла, будет выполнено хотя бы один раз. Цикл продолжает свою работу, пока <условие> остается истинным. Формат цикла Do … Loop While:

Do <блок операторов> Loop While<условие> 

Листинг 11. Цикл с постусловием

' ЗАДАЧА: Составить программу игры "Угадай число". Программа должна случайным 
' образом генерировать число в диапазоне от 1 до 1000, пользователь должен 
' угадать это число. Программа на каждое вводимое число выводит подсказку 
' "больше" или "меньше". 

Sub sample8() 
Randomize Timer ' инициализация генератора случайных чисел 

	Dim msg As String ' строка сообщения 
	Dim SecretNumber As Long, UserNumber As Variant 
Begin:	SecretNumber = Round(Rnd * 1000) ' число, сгенерированное компьютером 
	UserNumber = Empty ' число, вводимое пользователем 

	Do ' игровой процесс 
		Select Case True 
			Case IsEmpty(UserNumber): msg = "Введите число" 
			Case UserNumber > SecretNumber: msg = "Слишком много!" 
			Case UserNumber < SecretNumber: msg = "Слишком мало!" 
		End Select 

		UserNumber = InputBox(prompt:=msg, Title:="Угадай число") 
	Loop While UserNumber <> SecretNumber 

	' проверка 
	If MsgBox("Играть еще? ", vbYesNo + vbQuestion, "Вы угадали!") = vbYes Then 
		GoTo Begin 
	End If 
End Sub 

Циклы Do Until … Loop и Do … Loop Until являются инверсиями ранее рассмотренных циклов с условием. В общем случае они работают аналогично, за исключением того, что тело цикла выполняется при ложном условии (т.е. <условие>=False). Формат цикла Do Until … Loop:

Do Until <условие> <блок операторов> Loop 

Формат цикла Do … Loop Until:

Do 
	<блок операторов> 
Loop Until<условие> 

Цикл While … Wend также относится к циклам с условием. Данный оператор полностью соответствует структуре Do While … Loop. Формат цикла While … Wend:

While <условие> 
	<блок операторов> 
Wend 

Отличительной особенностью этого оператора является невозможность принудительного завершения (прерывания) тела цикла (оператор Exit Do не работает в цикле While … Wend).

Прерывание цикла

Для досрочного завершения итерации и выхода из цикла применяется оператор Exit. Этот оператор применим в любой циклической структуре, кроме While ... Wend. Общий синтаксис использования Exit для прерывания цикла таков:

<начало_цикла> 
	[<блок операторов1>] 
	Exit (For | Do) 
	[<блок операторов2>] 
	[Exit (For | Do)] 
	... 
<конец_цикла> 

При выполнении оператора Exit цикл прерывается, и управление передается оператору, следующему за оператором <конец_цикла>. В теле цикла может присутствовать несколько операторов Exit.

Листинг 12. Принудительный выход из цикла

Sub sample9() 
	For i = 1 To 10000000 
		If i = 10 Then Exit For ' выход из цикла, когда счетчик достигнет 10 
	Next 
End Sub 

22.01.2017; 18:55
хиты: 101
рейтинг:0
Точные науки
информатика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2025. All Rights Reserved. помощь