Цикл можно выполнить произвольное число раз, либо ни одного. Инструкция Exit Do позволяет безусловно передать управление команде, которая следует за последней командой цикла.
Counter = 99 Do Until Counter <= 0 If Counter > 50 Then MsgBox "Начальное значение больше допустимого" | Exit Do End If Call MySubroutine Counter = Counter – 2 Loop |
В данном примере выполняется безусловный выход из цикла, если значение переменной Counter больше 50. Таким образом можно предотвратить возникновение ошибок в других частях программы.
Цикл While…Wend
Инструкция While…Wend является разновидностью инструкции Do…Loop. В ранних версиях Basic, в которых не было инструкции Do…Loop, весьма эффективно использовалась команда While…Wend. Формат инструкции прост:
While [условие]
инструкции
Wend
Первый пример для инструкции Do…Loop можно с легкостью изменить, чтобы использовать цикл While…Wend:
Counter = 100
While Counter > 0
Call MySub
Counter = Counter - 1
Wend
Инструкция While…Wend в отличие от цикла Do…Loop не имеет второго варианта, в котором проверка условия выполняется в конце цикла. Кроме того, для данного цикла нет инструкции для безусловного выхода, подобной Exit Do.
Цикл For…Next
Инструкцию For…Next можно встретить в большинстве языков программирования. Она позволяет циклически выполнить набор утверждений заданное число раз. Формат инструкции следующий:
For счетчик = начало To конец [Step шаг]
[инструкции]
Next счетчик
Параметр счетчик - это числовая переменная, которая автоматически увеличивается после каждого повтора. Начальное значение счетчика равно параметру начало, а конечное - параметру конец. Приведем пример программы перебора всех дней недели:
Sub Дни_недели()
For i = 1 To 8
Select Case i
Case 1
День = "Понедельник"
Case 2
День = "Вторник"
Case 3
День = "Среда"
Case 4
День = "Четверг"
Case 5
День = "Пятница"
Case 6
День = "Суббота"
Case 7
День = "Воскресенье"
Case Else
День = "Нет вариантов"
End Select
MsgBox (День)
Next i
End Sub
Обратите внимание, что переменная i автоматически увеличивается по достижении конца цикла. Ее не требуется изменять отдельной командой. Применяемый по умолчанию шаг равный 1, можно изменить, указав необязательное ключевое слово Step и величину шага. Значение шага может быть как положительным, так и отрицательным, что позволяет также создать циклы для счета в обратном направлении.
ПРАКТИЧЕСКОЕ УПРАЖНЕНИЕ
Напишем программу, которая бы имитировала выбрасывание игральной кости с помощью датчика случайных чисел.
После запуска программы, мы должны будем ввести число выбрасываний. Окончательным результатом работы будет сообщение о количестве выпаданий каждой грани.
Чтобы выполнить эту задачу, нам придется воспользоваться несколькими новыми функциями:
Rnd() – генерация случайного числа в диапазоне [0; 1);
Int(число) – целая часть числа;
Chr(13) – перевод строки (аналогично нажатию клавиши Enter).
1. Перейдите в редактор VBA и откройте окно проекта, если до этого оно было закрыто.
2. Отобразите окно модуля.
3. В окне модуля введите следующую процедуру:
Public Sub Выбрасывание_кости() Dim numbers(6) As Double Dim a As Double N = InputBox("Введите число выбрасываний кости") For i = 1 To N a = Int(Rnd() * 6) + 1 numbers(a) = numbers(a) + 1 Next i | info = "Число выбрасываний" & Chr(13) & Chr(13) & _ "1 - " & numbers(1) & _ " 4 - " & numbers(4) & Chr(13) & _ "2 - " & numbers(2) & _ " 5 - " & numbers(5) & Chr(13) & _ "3 - " & numbers(3) & _ " 6 - " & numbers(6) MsgBox (info) End Sub |
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Нарисовать общую схему команды цикла.
2. Как выглядит общий вид записи оператора цикла с известным числом повторений?
3. Что значат в переводе слова For, Step, Next?
4. Как выполняется оператор цикла с известным числом повторений?
5. Может ли быть шаг цикла отрицательным?