Отличие циклов с предусловием от циклов с постусловием заключается в том, операторы цикла с постусловием всегда выполняются хотя бы один раз.
Пример 1:
Вычислить значения Y=sin(x)+ex для всех значений хÎ[a,b]
· Программный код с использованием оператора Do While
Public Sub Операторы_повтора1()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do While x <= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop
End Sub
· Программный код с использованием оператора While
Public Sub Операторы_повтора2()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
While x <= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Wend
End Sub
· Программный код с использованием оператора Do Until
Public Sub Операторы_повтора3()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do Until x >= b
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop
End Sub
· Программный код с использованием оператора Do … Loop While
Public Sub Операторы_повтора4()
Dim a As Double, b As Double, hx As Double
Dim x As Double, y As Double
Dim i As Integer
a = Worksheets(1).Range("b1")
b = Worksheets(1).Range("b2")
hx = Worksheets(1).Range("b3")
Worksheets(1).Range("a4") = "Результат"
x = a: i = 5
Do
y = Sin(x) + Exp(x)
Worksheets(1).Cells(i, 1) = "x[" & i & "]="
Worksheets(1).Cells(i, 2) = x
Worksheets(1).Cells(i, 3) = "y[" & i & "]="
Worksheets(1).Cells(i, 4) = y
i = i + 1
x = x + hx
Loop While x <= b
End Sub
Пример 2
Рассортировать по убыванию одномерный массив, содержащий 10 вещественных элементов.
Текст программы приведен ниже
Public Sub Сортировка()
Dim a(1 To 10) As Double
Dim i As Integer, i1 As Integer
Dim n As Integer, imax As Integer
Dim j As Integer
Dim max As Double
Worksheets(1).Range("a1") = "Исходный массив"
n = 10
j = 2
For i = 1 To n
a(i) = Worksheets(1).Cells(j, 1)
j = j + 1
Next i
i1 = 1
Do While i1 <= n - 1
max = a(i1)
imax = i1
For i = i1 To n
If a(i) > max Then
imax = i: max = a(i)
End If
Next i
a(imax) = a(i1)
a(i1) = max
i1 = i1 + 1
Loop
Worksheets(1).Range("c1") = "Рассортированный массив"
j = 2
For i = 1 To n
Worksheets(1).Cells(j, 3) = a(i)
j = j + 1
Next i
End Sub
Пример 3
Вычислить . Вычисление суммы прекратить, когда при каком-то значении i, общий член ряда станет <=e
Текст программного кода будет выглядеть следующим оьразом
Public Sub Summa_ряда()
Const eps = 0.001
Dim sum As Double, ai As Double
Dim n As Integer, i As Integer
Dim j As Integer
Dim f1 As Integer, f2 As Integer
sum = 0
i = 1
ai = 1 / 2
Do Until ai <= eps
sum = sum + ai
i = i + 1
f1 = 1
For j = 1 To i
f1 = f1 * j
Next j
f2 = 1
For j = 1 To 2 * i
f2 = f2 * j
Next j
ai = f1 / f2
Loop
MsgBox "Значение i=" & i & Chr(10) & _
"Значение ai=" & ai & Chr(13) & _
"Значение Sum=" & sum
End Sub