Лабораторная работа. Основы работы в VBA. Алгоритмическая структура - цикл

3. Оператор неопределенного цикла Do ... Loop

         Все неопределенные циклы строятся с помощью одного оператора цикла – Do. Оператор Do имеет много опций и является настолько гибким, что в действительности он предоставляет четыре различных конструкции цикла в двух базовых категориях.

Две базовые категории конструкций цикла Do – это циклы, которые тестируют условие до выполнения тела цикла, и циклы, которые тестируют условие после выполнения тела цикла.

 – цикл Do ... Loop с проверкой условия в начале:

          В приведенном цикле проверка осуществляется через ключевое слово While. Цикл работает пока условие истинно. Как только условие становится ложным, цикл прекращает свою работу.  

          Do While  условие

         [блок_операторов]

         Loop

        В приведенном цикле проверка осуществляется через ключевое слово Until. Цикл работает пока условие ложно. Как только условие становится истинным, цикл прекращает свою работу.  

          Do Until условие

         [блок_операторов]

         Loop

 – цикл Do ... Loop с проверкой условия в конце:

          Do

         [блок_операторов]

         Loop While условие

 

         Do

         [блок_операторов]

         Loop Until условие

    Таким образом, общий вид цикла DoLoop можно представить в виде:

 

Цикл “ПОКА”

Цикл “ДО”

цикл

с пост-

условием

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 – шаг изменения значения переменной цикла.

 Пример 1. Построить  и заполнить таблицу значениями функции \( y= \frac{2,51 sin x}{ \sqrt[3]{2+3 cos x} } \) на интервале 16°≤x≤40° с шагом 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

          Пример 2. Вычислить с помощью цикла наибольшее положительное число n, удовлетворяющее условию \( 4 \cdot n^3-n^2 +3 \cdot n<2,5 \cdot10^8 \).

          Решение.

 Sub task()

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

Результата выполнения программы: