Анимация
JavaScript
|
Главная Библионтека 10.4. Операторы цикла Do-Loop В VBA для организации циклов с неизвестным заранее числом шагов используются и другие операторы цикла: Do While-Loop, Do Until-Loop, Do-Loop While и Do-Loop Until. Оператор имеет следующий синтаксис: While УСЛОВИЕ БЛОК ОПЕРАТОРОВ Wend Цикл While-Wend обеспечивает многократное выполнение блока операторов, пока УСЛОВИЕ принимает значение True. Приведенная ниже функция Доход 2 вычисляет то же значение, что и функция Доход, но с использованием цикла While-Wend. Option Base I Function Доход 2 (процент As Double, платеж As Variant, год As Variant) As Double Dim i, j, n As integer, s As Double n = платеж .Rows .Count s = 0 i - I While i <= n s = s + платеж(1)/(1 + процент) ((год(i) - год (1))/365) i = i + 1 Wend Доход 2 = s End Function Рассмотрим еще один пример выравнивания по центру содержимого всех ячеек, начиная с активной, сверху вниз, до тех пор, пока не встретится пустая ячейка ([1]). 1 = 0 While ActiveCell .Change (i, 0) oEmpty ActiveCell.Cell(i , 0) .HorizontalAlignment=xlCenter 1=1 + 1 Wend Перечисленные операторы имеют следующий синтаксис: Do While УСЛОВИЕ БЛОК ОПЕРАТОРОВ [Exit Do] БЛОК ОПЕРАТОРОВ Loop Do Until УСЛОВИЕ БЛОК ОПЕРАТОРОВ [Exit Do] БЛОК ОПЕРАТОРОВ Loop БЛОК ОПЕРАТОРОВ [Exit Do] БЛОК ОПЕРАТОРОВ Loop While УСЛОВИЕ БЛОК ОПЕРАТОРОВ [Exit Do] БЛОК ОПЕРАТОРОВ Loop Until УСЛОВИЕ Оператор Do While-Loop обеспечивает многократное выполнение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор Do Until-Loop - пока УСЛОВИЕ не соблюдается. Операторы Do-Loop While и Do-Loop until отличаются от перечисленных выше двух операторов тем, что сначала блок операторов выполняется по крайней мере один раз, а потом проверяется УСЛОВИЕ. Оператор Exit Do обеспечивает досрочный выход из оператора цикла. Приведем пример использования цикла Do-Loop While при нахождении корня уравнения /(х) = О методом Ньютона ([2]). Для нахождения приближенного значения корня уравнения методом Ньютона необходимо задать начальное приближение хо, а затем определить последующие приближения к корню методом итераций по формуле " "- /<-.-,)• гдеп =1, 2, ... Процесс останавливается при выполнении неравенства I Хп - 1 < £, где £ - точность определения корня. В следующей программе методом Ньютона решается уравнение jc = 2 ([2]). За начальное приближение к корню взято число 3, а корень вычисляется с точностью до 0,00001. Найденное значение корня с помощью метода ActiveCell выводится в активную ячейку. Option Explicit Function F(x As Double) As Double F = X 2 - 2 Уравнение f (x) = x2-2 = 0 End Function Function DF(x As Double) As Double DF = 2 * X Производная функции f(x) End Function Sub MN ( ) Const Eps = 0.00001 Точность определения корня Dim xO, X As Double X = 3 xO = X X = X - F(x)/DF(x) Loop While Abs(x - xO) > Eps ActiveCeLl.Value = x End Sub Примером использования цикла Do-Loop Until может служить следующая программа нахождения корня уравнения Дх) = О методом деления отрезка пополам ([2]). В этой программе находится корень уравнения = 2 с точностью до £ = 0,00001. За отрезок начальной локализации корня берется отрезок (О, 2). Function F (х) F = X 2 - 2 уравнение f(x)= х2-2=0 End Function Sub ВМ ( ) Dim с, FC As Double Dim a, b, Eps, BM As Double 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [ 23 ] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |