Программирование циклов, цикл do while

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

Общий вид оператора While:

While выражение
[инструкции]
Wend

Оператор While предназначен для организации цикла-пока.

Инструкции будут выполняться пока выражение будет истинно.

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма1()
Dim x, s As Double
 
x = 0
s = 0
While x <= 100
s = s + x
x = x + 1
Wend
MsgBox ("s=" + Str(s))
 
End Sub

Пояснение решения.

В переменной s накапливается значение суммы.

Общий вид оператора Do While:

Do [While выражение]
[инструкции]
[Exit Do]
[инструкции1]
Loop

Оператор Do While предназначен для организации цикла-пока.

Инструкции будут выполняться пока выражение будет истинно. Конструкция Exit Do предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма2()
Dim x, s As Double
 
x = 0
s = 0
 
Do While x <= 100
s = s + x
x = x + 1
Loop
 
MsgBox ("s=" + Str(s))
 
End Sub

Общий вид оператора Do Loop Until:

Do
[инструкции]
[Exit Do]
[инструкции1]
Loop [Until выражение]

Оператор Do Loop Until предназначен для организации цикла-до.

Инструкции будут выполняться до момента, когда выражение станет истинным. Конструкция Exit Do предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма3()
Dim x, s As Double
x = 0
s = 0
 
Do
s = s + x
x = x + 1
Loop Until x > 100
 
MsgBox ("s=" + Str(s))
 
End Sub

Общий вид оператора For:

For счетчик = начальное_знач To конечное_знач [Step шаг]
[инструкции]
[Exit For]
[инструкции1]
Next [счетчик]

Оператор For предназначен для организации цикла-для.

Инструкции будут выполняться определенное количество раз, задаваемое в счетчик, начиная с начального значение (начальное_знач) до конечного значения (конечное_знач) с некоторым шагом (шаг). Конструкция Exit For предназначена для преждевременного выхода из цикла.

Пример. Вычислить сумму чисел от 0 до 100.

Решение.

Sub сумма4()
Dim x, s As Integer
 
s = 0
For x = 0 To 100
s = s + x
Next x
 
MsgBox ("s=" + Str(s))
 
End Sub

Пример 1. Представить таблицу квадратов чисел от 2 до 10.

Решение.

Для отображения результатов воспользуемся Excel и для доступа к ячейкам функцией Cells (номер_строки, номер_колонки).

Sub квадраты()
Dim x
 
Cells(2, 1).Value = "x"
Cells(3, 1).Value = "x^2"
 
For x = 2 To 10
Cells(2, x).Value = x
Cells(3, x).Value = x ^ 2
Next x
End Sub

Пример 2. Составить программу определения наибольшего общего делителя (НОД) двух натуральных чисел.

Решение.

Наибольший общий делитель двух натуральных чисел — это самое большое натуральное число, на которое они делятся. Например, у чисел 12 и 18 наибольшие делители: 2, 3, 6. наибольшим общим делителем является число 6. Это записывается так:

НОД(12, 18) = 6.

Идея алгоритма Евклида для нахождения НОД основана на том свойстве, что если M>N, то

НОД(M, N) = НОД(M-N, N).

Иначе говоря, НОД двух натуральных чисел равен НОД их положительной разности и меньшего числа.

Sub Евклид()
Dim M, N, NOD
 
M = Cells(1, 2)
N = Cells(2, 2)
 
While M <> N
 
If M > N Then
M = M - N
Else
N = N - M
End If
Wend
 
NOD = M
Cells(3, 2).Value = NOD
 
End Sub

Пример 3. Построить график функции: улитку Паскаля.

Улитка Паскаля задается следующим образом:

x=A*cos(t)+B*cos(t)
y=A*cos(t)sin(t)+B*sin(t), A>B, B>0, 0<=t<2*Pi

Решение.

1. Подготовить данные в электронной таблице

2. Ввести код программы.

Sub улитка_паскаля()
 
Dim a, b, Pi, t As Double
Dim i As Integer
 
a = Cells(1, 2)
b = Cells(2, 2)
Pi = 3.14
i = 2
t = 0
 
While t <= 2 * Pi
x = a * Cos(t) + b * Cos(t)
y = a * Cos(t) * Sin(t) + b * Sin(t)
 
Cells(3, i).Value = x
Cells(4, i).Value = y
t = t + 0.1
i = i + 1
Wend
 
End Sub

3. Построить график с помощью мастера диаграмм, выбрав точечную диаграмму.

4. Изменить данные a и b.

A=2
B=1

5. Перезапустить макрос.