Оператор неопределенного цикла Do ... Loop
Все неопределенные циклы строятся с помощью одного оператора цикла – Do.Оператор Doимеет много опций и является настолько гибким, что в действительности он предоставляет четыре различных конструкции цикла в двух базовых категориях.
Две базовые категории конструкций цикла Do – это циклы, которые тестируют условие до выполнения тела цикла, и циклы, которые тестируют условие после выполнения тела цикла.
– цикл Do ... Loop с проверкой условия в начале:
В приведенном цикле проверка осуществляется через ключевое слово While. Цикл работает пока условие истинно. Как только условие становится ложным, цикл прекращает свою работу.
Do While условие
[блок_операторов]
Loop
В приведенном цикле проверка осуществляется через ключевое слово Until. Цикл работает пока условие ложно. Как только условие становится истинным, цикл прекращает свою работу.
Do Until условие
[блок_операторов]
Loop
– цикл Do ... Loop с проверкой условия в конце:
Do
[блок_операторов]
Loop While условие
Do
[блок_операторов]
Loop Until условие
Таким образом, общий вид цикла Do…Loop можно представить в виде:
Цикл “ПОКА” | Цикл “ДО” | |
цикл с пост- условием | parametr = начало shag = шаг DO [блок операторов – тело цикла] parametr = parametr + shag LOOP WHILE условие | parametr = начало shag = шаг DO [блок операторов – тело цикла] parametr = parametr + shag LOOP UNTIL условие |
цикл с пред- условием | parametr = начало shag = шаг DO WHILE условие [блок операторов – тело цикла] parametr = parametr + shag LOOP | parametr = начало shag = шаг DO UNTIL условие [блок операторов – тело цикла] parametr = parametr + shag LOOP |
Здесь parametr – переменная, по которой организован цикл (параметр цикла); shag – шаг изменения значения переменной цикла.
Пример. Построить и заполнить таблицу значениями функции на интервале с шагом 4°.
– решение с использованием ключевого слова While(цикл с предусловием):
Sub Demo_Do_While_Loop()
Dim xStart, xEnd, xStep As Integer
Dim x As Integer
Dim i As Integer
Dim xradian, y As Single
xStart = Cells(2, 2)
xEnd = Cells(3, 2)
xStep = Cells(4, 2)
i = 1
x = xStart
' Пока x<= 40 выполняются следующие действия:
Do While x <= 40
xradian = 3.14 * x / 180
y = (2.51 * Sin(xradian) / (2 + 3 * Cos(xradian)) ^ (1 / 3))
i = i + 1
Cells(i, 4) = x
Cells(i, 5) = y
x = x + xStep
' Окончание цикла
Loop
End Sub
– решение с использованием ключевого слова While(цикл с постусловием):
Sub Demo_Do_Loop_While()
Dim xStart, xEnd, xStep As Integer
Dim x As Integer
Dim i As Integer
Dim xradian, y As Single
xStart = Cells(2, 2)
xEnd = Cells(3, 2)
xStep = Cells(4, 2)
i = 1
x = xStart
' Начало цикла
Do
xradian = 3.14 * x / 180
y = (2.51 * Sin(xradian) / (2 + 3 * Cos(xradian)) ^ (1 / 3))
i = i + 1
Cells(i, 4) = x
Cells(i, 5) = y
x = x + xStep
' Повторить действия, пока x<= 40
Loop While x <= 40
End Sub
– решение с использованием Until(с предусловием):
Sub Demo_Do_Until_Loop()
Dim xStart, xEnd, xStep As Integer
Dim x As Integer
Dim i As Integer
Dim xradian, y As Single
xStart = Cells(2, 2)
xEnd = Cells(3, 2)
xStep = Cells(4, 2)
i = 1
x = xStart
' Выполнять действия, пока x не превысит 40
Do Until x > 40
xradian = 3.14 * x / 180
y = (2.51 * Sin(xradian) / (2 + 3 * Cos(xradian)) ^ (1 / 3))
i = i + 1
Cells(i, 4) = x
Cells(i, 5) = y
x = x + xStep
' Конец цикла
Loop
End Sub
– решение с использованием Until(с постусловием):
Sub Demo_Do_Until_Loop()
Dim xStart, xEnd, xStep As Integer
Dim x As Integer
Dim i As Integer
Dim xradian, y As Single
xStart = Cells(2, 2)
xEnd = Cells(3, 2)
xStep = Cells(4, 2)
i = 1
x = xStart
' Начало цикла
Do
xradian = 3.14 * x / 180
y = (2.51 * Sin(xradian) / (2 + 3 * Cos(xradian)) ^ (1 / 3))
i = i + 1
Cells(i, 4) = x
Cells(i, 5) = y
x = x + xStep
' Повторить действия, пока x не превысит 40
Loop Until x > 40
End Sub
Пример. Вычислить с помощью цикла наибольшее положительное число n, удовлетворяющее условию .
Решение.
Sub n()
Dim n As Integer
n = 1
' Выполнять действия, пока истинно условие:
Do While 4 * n ^ 3 - n ^ 2 + 3 * n < 250000000#
n = n + 1
Loop
MsgBox "Наибольшее целое " & n - 1, , "Ответ задачи"
End Sub