С помощью инструкций присваивания и условного перехода можно реализовать сколь угодно сложный алгоритм. Однако на практике выполнение часто повторяющихся последовательностей действий и обработку массивов целесообразнее выполнять с помощью специальных инструкций цикла. Циклы являются основой алгоритмизации задач при их решении на компьютере. Циклы бывают двух видов: с фиксированным числом повторений и циклы с условием - с неизвестным числом повторений. Каждый цикл состоит из заголовка цикла и тела цикла – повторяемого блока операторов. Тело цикла может состоять из одного или нескольких инструкций. В циклах с условием необходимо задавать начальное значение параметра цикла до входа в цикл и его изменение в теле цикла.
В VBA применяются следующие способы организации таких циклов:
Do While < Условие> - Loop
Синтаксис:
Do While < Условие >
<Инструкции>
[Exit Do]
<Инструкции>
Loop
Цикл выполняется до тех пор, пока <Условие> истинно.
< условие> - логическое выражение, принимающее значение True(истина) или False(ложь).
Необязательная инструкция Exit Do предназначена для прекращения цикла и передачи управления Loop - конец цикла. Цикл с такой организацией называют также циклом с предусловием. Минимальное число повторений этого цикла – 0. Выполнение цикла с предусловием состоит из следующих шагов:
Проверяется <условие>. Если <условие> имеет значение True, то выполняются инструкции, составляющие тело цикла (до оператора Loop) столько раз, пока<условие> не примет значение False.
Как только <условие> получит значение False, осуществится выход из цикла, т. е. переход к оператору, следующему за Loop.
Пример 1. Вычислить N!, при N =10
Текст программы
Sub Factorial_1()
Dim N, Fact As Long ‘ Объявление переменных N и Fact
Fact=1 ‘Начальное значение переменной Fact
N=1 ’ Начальное значение параметра цикла
Do While N<=10 ‘Начало цикла, Проверка условия
Fact= Fact *N
MsgBox Fact, Vbinformation,”Вывод текущего значения”
N=N+1 ’ Изменение параметра цикла
Loop ‘ конец цикла
MsgBox “fact=” & fact, Vbinformation, “Результат”
End Sub
Цикл структуры Do - Loop Until <Условие >
Do
< Инструкции >
[Exit Do]
< Инструкции >
Loop Until <Условие >
Цикл повторяется, пока условие ложно. Как только условие станет истинным, цикл прекращается. Цикл с такой организацией называют также циклом с постусловием, рис.8.4.б)
В циклах с постусловием выполняются все инструкции тела цикла, а затем проверяется условие, поэтому цикл выполнится хотя бы один раз.
Рассмотрим предыдущий пример с новой организацией цикла.
Пример 2. Вычислить и напечатать N! Для N =10.
Текст программы
Sub Factorial_2()
'Объявление переменных N,Fact
Dim N,Fact As Long
Fact = 1 'Начальное значение факториала
N = 1 'Начальное значение параметра цикла n
Do
Fact = Fact * N 'Вычисление факториала
'Вывод текущего значения факториала
MsgBox Fact,vbInformation, "Вывод текущего значения "
N = N + 1 'Изменение параметра цикла
Loop Until N >= 10
'Вывод результата
MsgBox "fact=" & fact,vbInformation, "Результат "
End Sub
Помимо рассмотренных структур имеются их модификации:
с предусловием Do Until < Условие>– Loop
Синтаксис структуры
_ Do Until < Условие>
< Инструкции >
[Exit Do]
< Инструкции >
Loop
Until указывает на то, что цикл выполняется до тех пор, пока условие не станет истинным. Минимальное число повторений цикла 0.
С постусловием Do - Loop While <Условие>
Синтаксис структуры
Do
<Инструкции>
[Exit Do ]
<Инструкции>
Loop While <Условие>
Цикл выполняется хотя бы один раз, проверка < условия> выполняется в конце цикла
While <условие > - Wend.
Синтаксис структуры
While <условие >
<Инструкции >
Wend
Выполняется последовательность инструкций, пока заданное условие имеет значение True.
Пример 3. Вычислить значение функции f(x) = sin(x) при 1<=x<=2 с шагом h=0.1
Sub FN()
Dim X, f, H As Single, S, S1
X = 1 ’Начальное значение параметра цикла
H = 0.1 ’Шаг изменения параметра цикла
While X <= 2 ’Проверка условия
F=Sin(X)
F=Format(F, ” ###0.000”)
S=S & Str (F)
S1=S1 & Str(X)
X = X + H ’Изменение параметра цикла
X=Format (X, “###0.0”)
MsgBox “X = ” & S1 & “ ” & (Chr(10) & Chr(13)) _
& “F = ” & S & “ ” & (Chr(10) & Chr(13)) _
, VbInformation,” Значения аргумента Х и функции F”
Wend
End Sub