Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сидорова-004.С34.doc
Скачиваний:
91
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

8.4. Итерационные циклы

Итерационные циклы – это циклы с неизвестным числом повторений.

Итерационные циклы организуются с помощью конструкций While … Wend или Do … Loop.

Наиболее простым вариантом реализации итерационного цикла является использование конструкции While … Wend:

While Условие

'Операторы, которые выполняются, пока Условие истинно

Wend

Когда Условие, записанное справа от ключевого слова While, перестанет выполняться, осуществляется выход из цикла, т. е. переход к оператору, следующему за ключевым словом Wend.

В ГСА итерационный цикл изображается только в полной форме.

Пример ЦИ1. Найти наибольшее положительное целое число n, удовлетворяющее условию: 3n5 – 690n ≤ 7.

Решить поставленную задачу с помощью арифметического цикла невозможно, поскольку число повторений цикла неизвестно, но эта задача легко решается с помощью итерационного цикла While … Wend. ГСА решения задачи приведена на рис. 34. Листинг программы имеет вид:

S ub Пример_ЦИ1() 'Итерационный цикл

Dim n As Byte

n = 1 'Начальное значение переменной n

While 3 * n^5 – 690 * n <= 7 'Заголовок цикла

n = n + 1 'Очередное значение n

Debug.Print "n="; n, "расчет="; 3*n^5–690*n

Wend 'Возврат к началу цикла

Debug.Print "Искомое число = "; n–1 'Не n, так как

'выходим из цикла после увеличения n на 1

End Sub

Следует заметить, что в VBA итерационный цикл можно реализовать и с помощью операторов If и GoTo, но такой подход является устаревшим и практически не применяется.

8.4.1. Операторы цикла Do … Loop

Другим способом реализации итерационного цикла является использование оператора Do … Loop. Возможны различные формы его записи:

Do While Условие

'Операторы, которые выполняются, пока Условие истинно

Loop

Эта форма полностью аналогична рассмотренному выше оператору While … Wend.

Другая форма записи оператора Do … Loop предполагает повторение циклического процесса пока Условие ложно:

Do Until Условие

'Операторы, которые выполняются, пока Условие ложно

Loop

Приведем пример, демонстрирующий различие этих форм записи оператора Do … Loop. Пусть нужно выполнять цикл, пока x – положительное:

Do While x > 0 Do Until x<=0

'Тело цикла 'Тело цикла

Loop Loop

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

Однако существуют и другие формы записи:

1) Do

'Тело цикла

Loop While Условие

2) Do

'Тело цикла

Loop Until Условие

Приведенные формы записи отличаются от предыдущих только тем, что в них ключевое слово (While или Until) и условие перенесены из заголовка цикла в конец. Такие циклы называются циклами с постусловием и отличаются от циклов с предусловием тем, что в них цикл обязательно выполняется хотя бы один раз. ГСА циклов Do While приведены на рис. 35.

П ример ЦИ2 (накопление суммы в итерационном цикле). Через сколько месяцев удвоится сумма на вкладе в банке, если каждый месяц банк начисляет 1 % на текущий остаток вклада?

Текст программы с использованием цикла с предусловием имеет вид:

Sub Пример_ЦИ2() 'Вычисление суммы в итерационном цикле

Dim S As Single 'Текущая сумма вклада

Dim kS As Single 'Конечная сумма вклада

Dim m As Integer 'Счетчик месяцев

S = Val(InputBox("Введите S")) 'Ввод начальной суммы вклада

kS = 2 * S 'Расчет конечной (удвоенной) суммы вклада

m = 0 'Начальное значение счетчика месяцев

While S < kS 'Заголовок итерационного цикла

m = m + 1 'Наращивание счетчика месяцев

S = S + 0.01 * S 'Увеличение суммы вклада

Debug.Print "Месяц = "; m, "S ="; S 'Вывод промежуточных результатов

Wend 'Возврат к началу цикла

Debug.Print "Через "; m; " мес. сумма удвоится, S ="; S 'Вывод результата

End Sub