logo
информ

23)Операторы цикла

Цикл — представляет собой многократно повторяющуюся последовательность операторов. Операторы повторяются конечное число раз до выполнения условия

Циклы со =циклы For, или циклами For … Next. Синтаксис цикла For … Next таков:

For Счетчик = Начало To Конец [Step Шаг]

Операторы

[Exit For]

[Операторы]

Next [Счетчик],

где For – зарезервированное слово VBA, обозначающее начало цикла; Счетчик – переменная, определенная в качестве счетчика цикла, при первом выполнении циклв принимает значение Начало и каждый раз при выполнении оператора Next увеличивается на величину, заданную параметром Шаг; To – зарезервированное слово VBA, разделяющее значения Начало и Конец; Step – зарезервированное слово VBA, используемое для задания шага цикла, необязательный аргумент; Шаг – число, задающее значение, на которое увеличивается

Exit For – оператор экстренного выхода из цикла; Next – зарезервированное слово VBA, обозначающее конец цикла.

Step отсутствует, то значение шага равен единице.

пример

Составить программу вычисления суммы и произведения числовой

последовательности. ,

Дано: начало a и конец n суммирования и произведения.

Найти: Sum, Pr.

Private Sub CommandButton1_Click()

Dim a, n, h, i As Integer

Dim Sum, Pr, b As Single

'Ввод данных

a = Range("A1").Value

n = Range("B1").Value

h = Range("C1").Value

'Вычисления

Sum = 0

Pr = 1

For i = a To n Step h

b = Sin(2 * i + 0.4)

Sum = Sum + b

Pr = Pr * b

Next i

’Вывод результатов в ячейки B4 и B5

Range("B4").Value = "Сумма = " & Sum

Range("B5").Value = "Произведение = " & Pr

End Sub

Программирование цикла с условием

Циклы с условием применяются , когда число повторений неизвестно, а некоторые действия в программе должны повторяться до тех пор, пока выполняется определенное условие или до тех пор, пока не будет выполнено определенное условие. Условием может быть любым выражением, принимающим значение True (Истина) или False (Ложь). В VBA есть два основных цикла с условием — цикл Do While ... Loop и цикл Do Until ... Loop. Оба они могут быть с предусловием или с постусловием.

Циклы Do While | Until имеют следующий синтаксис:

Цикл с предусловием:

Do While | Until <Условие>Операторы [Exit Do]Loop

Цикл с постусловием:Do

Операторы[Exit Do]Loop While | Until <Условие>,

где Do — зарезервированное слово VBA, указывающее на начало цикла; While|Until — зарезервированные слова VBA, если используется While -> цикл выполняется, если <Условие> принимает значение True и заканчивает свою работу, если <Условие> принимает значение False. Если используется Until -> цикл выполняется, если <Условие>=False и заканчивает свою работу, если <Условие>=True; <Условие> — логическое выражение, принимающее значение True или False; Loop — зарезервированное слово VBA, указывающее на окончание цикла.

Цикл с предусловием и Цикл с постусловием отличаются тем, что Цикл с постусловием выполняется хотя бы один раз до проверки <Условие>, а Цикл с предусловием может не выполняться ни разу, если не выполняется <Условие>.

Для заданного найти наименьшее n такое, что 2n/n!< . Вывести все члены последовательности от 1-го до n-го.

u = 1 'первый множитель

n = 0 'количество шагов

Range("C1:E20").Clear

Do Until (u < Eps) Or (n >= Limit)

n = n + 1

q = 1

For i = 1 To n

q = q * i

Next i

u = 2 ^ n / q 'очередной множитель

Cells(n, 4).Value = n

Cells(n, 5).Value = u

Loop

но при таких вычислениях может быстро накапливаться ошибка и мы можем получить не верный результат.

Обратим внимание, что

u1=2\1/1!,

u2=2\2/2!=2*2/(1*2)= u1*21/2,

u3=2\3/3!=22*2/(1*2*3)= и2*2/3 и т.д,

т.е. у нас возникает множитель 2/n, умноженный на значение предыдущего шага.

Нам необходимо учесть, что число шагов может быть невообразимо много, поэтому мы введет константу для ограничения шагов Limit = 100.

Public Sub Степень_двух()

'Описание констант

Const Limit As Integer = 100

'Описание переменных

Dim Eps As Single

Dim u As Single

Dim u1 As Single

Dim n As Integer

'Ввод переменных

Eps = Range("b1").Value

'Задание начальных значений

u = 1 'первый множитель

n = 0 'количество шагов

Range("C1:E20").Clear

'Вычисление значений

Do Until (u < Eps) Or (n >= Limit)

Cells(n, 4).Value = n

u1 = u

u = u1 * 2 / n 'очередной множитель

n = n + 1

Cells(n - 1, 5).Value = u

Loop

'Вывод результатов

Range("A6:A7").Clear

If n >= Limit Then

Range("A7").Value = n & " шагов не хватило для достижния точночти."

End If

End Sub