Оператор цикла Do – Loop

В VBA для организации циклов с неизвестным заранее числом повторений используются и другие операторы циклов:

1.

Do While Условие

Блок операторов

Loop

2.

Do Until Условие

Блок операторов

Loop

3.

Do

Блок операторов

Loop While Условие

4.

Do

Блок операторов

Loop Until Условие

Оператор Do While – Loop обеспечивает многократное выполнение блока операторов до тех пор, пока условие истинно, а оператор Do Until – Loop – пока условие ложно.

Операторы Do – Loop While и Do – Loop Until отличаются от первых двух операторов тем, что сначала выполняется блок операторов, а затем проверяется условие. Таким образом, в этих циклах блок операторов, составляющих тело цикла, выполнится по крайней мере один раз.

Приведем пример использования цикла Do – Loop While при нахождении корня уравнения f(x) = 0 методом Ньютона.

Для нахождения приближенного значения корня уравнения методом Ньютона необходимо задать начальное приближение х0, а затем определить последующие приближения к корню методом итерации по формуле

f(xn–1)

 
  Оператор цикла Do – Loop - student2.ru

xn = xn –1 – , где n = 1, 2,…

f’(xn–1)

Процесс останавливается при выполнении неравенства |xn–xn–1| £ e, где e – точность определения корня.

Уравнение x2 = 2, начальное приближение к корню – число 3, точность вычисления 0,00001.

Ответ: х = 1,414207.

Программный код

Option Explicit

Sub PR12()

Const eps = 0.00001

Dim x0 As Double, x As Double

x = 3

Do

x0 = x

x = x – (x ^ 2 – 2) / (2 * x)

Loop While Abs(x – x0) > eps

MsgBox ("корень уравнения=" & x)

End Sub

Примером использования цикла Do – Loop Until может служить программа нахождения корня уравнения f(x) = 0 методом деления отрезка пополам.

Вычислим корень уравнения x2 = 2 с точностью до e = 0,00001. За отрезок начальной локализации корня берется отрезок [0; 2].

Ответ: х = 1,414207.

Программный код

Option Explicit

Sub PR13()

Dim c As Double, f As Double

Dim fa As Double, fb As Double, fc As Double

Dim a As Double, b As Double, eps As Double, bh As Double

a = 0: b = 2: eps = 0.00001

fa = a ^ 2 - 2

fb = b ^ 2 - 2

If fa * fb >= 0 Then

MsgBox ("Функция не меняет знак на концах отрезка")

Exit Sub ‘ выход из процедуры

End If

Do

c = (a + b) / 2

fc = c ^ 2 - 2

fa = a ^ 2 - 2

f = fc * fa

If f < 0 Then b = c Else a = c

Loop Until b - a < eps

bh = c

MsgBox ("значение корня=" & bh)

End Sub

Массивы

Часто бывает необходимо работать с некоторым набором однотипных данных как с единым целым. В таких случаях используются массивы – структурированные боксы для хранения множеств элементов данных одинакового типа.

Массивы могут быть одномерными и многомерными.

Одномерные массивы

Одномерный массив – это набор однотипных элементов, расположенных друг за другом в одной строке или столбце.

Пример

1 –34 8 2 6

или

-5

Каждый элемент массива обозначается при помощи имени массива и индекса, заключенного в круглые скобки.

Индекс может быть:

· константой

Пример

P(1), C(5)

· переменной целого типа

Пример

A(i), B(j)

· арифметическим выражением (значение арифметического выражения должно быть целым)

Пример

A(i*2), Q(i^j)

Объявление массива

Как и обычные переменные, массивы должны быть объявлены. Для описания массива используется оператор Dim.

Dim Имя массива (Размерность массива) As Тип элементов

Пример

Dim A (100) As Integer

Dim B (50) As Byte

Dim С (40) As Double

При таком описании массива его элементы индексируются (т.е. нумеруются), начиная с нуля.

Если оператор описания будет выглядеть следующим образом:

Dim A (1 To 100) As Integer,

то элементы массива индексируются с единицы.

Ввод массива

Перед обработкой массива его необходимо заполнить (ввести).

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

1 способ. На рабочем листе введем числа в ячейки электронной таблицы (рис. 4), откроем окно программного кода и запишем в него программу, которая считывает данный массив чисел.

 
  Оператор цикла Do – Loop - student2.ru

Рис. 4. Исходный массив

Программный код

Option Explicit

Sub PR14()

Dim A(20) As Integer

Dim i As Integer

For i = 1 To 6

A(i) = Cells(1, i) ‘ массив заполняется

Next i ‘ числами с рабочего листа Excel

End Sub

2 способ. Массив можно заполнить при помощи счетчика случайных чисел. Для этого в программе после объявления переменных следует написать следующее:

Randomize

For i = 1 To 10

Cells(1, i) = Int(Rnd * 100 – 50)

A(i) = Cells(1, i) ‘ заполнение массива

Next i

Функция Rnd возвращает значение от 0 до 1. Перед вызовом функции Rnd используется инструкция Randomize без аргумента для инициализации генератора случайных чисел значением, возвращаемым системным таймером.

Cells(1, i) означает ячейку электронной таблицы, находящуюся в первой строке и столбце с номером i.

Вообще оператор Cells(i, j) служит для вывода информации в ячейку электронной таблицы или считывания информации из ячейки электронной таблицы Excel. В скобках через запятую указываются номер строки – i и номер столбца – j ячейки электронной таблицы.

Пример

Cells(1, 2) = x ‘в ячейку B1 записывается информация из переменной х

х = Cells(1, 2) ‘из ячейки В1 считывают информацию в переменную х

Вывод массива

Для распечатки полученного массива на рабочий лист Excel используется следующая конструкция:

For i = 1 To n

Cells(k, i) = A(i) ‘ вывод массива в ячейки электронной таблицы

Next i ‘ k – номер строки для заполнения ячеек.

Вместо переменной k можно использовать конкретное значение, например 3, тогда массив распечатается в третьей строке рабочего листа.

После заполнения ячеек их содержимое можно посмотреть, свернув окно программного кода при помощи кнопки “Свернуть” или переключившись в окно Excel с помощью соответствующей кнопки на панели задач.

В VBA удобно пользоваться различными рабочими листами в одной программе. Для установки нужного рабочего листа используется следующая команда:

Наши рекомендации