Оператор неопределенного цикла 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