- •Е. А. Сидорова, п. С. Челобанов основы программирования на vba омск 2011
- •1. Понятие и свойства алгоритма
- •1.1. Понятие алгоритма
- •1.2. Свойства и виды алгоритмов
- •1.3. Способы представления алгоритмов
- •2. Язык программирования vba
- •2.1. Языки программирования
- •2.2. Общие сведения о vba
- •2.3. Основные понятия языка программирования
- •2.4. Алфавит vba
- •2.5. Типы данных
- •2.6. Формы записи вещественных чисел в программе
- •2.7. Переменные
- •2.8. Константы
- •2.9. Встроенные функции
- •2.10. Выражения
- •2.11. Редактор Visual Basic
- •2.12. Правила записи и ввода программ на vba
- •2.13. Создание первой программы
- •3. Управление вводом и выводом данных
- •3.1. Оператор присваивания
- •3.2. Операторы ввода данных
- •3.3. Генерирование случайных чисел
- •3.4. Операторы вывода данных
- •4. Линейные вычислительные процессы
- •5. Разветвляющиеся вычислительные процессы
- •5.1. Алгоритм разветвляющегося процесса
- •5.2. Оператор условного перехода If
- •5.2.1. Однострочный (линейный) оператор If
- •If Условие Then Операторы_1 [ Else Операторы_2 ],
- •5.2.2. Блочная форма оператора If
- •5.3. Объединение условий с помощью логических операций
- •5.4. Оператор безусловного перехода GoTo
- •5.5. Оператор выбора Select Case
- •6. Символьные переменные
- •6.1. Общие понятия
- •6.2. Сравнение строк
- •6.3. Строковые функции
- •6.4. Оператор Mid
- •7. Введение в объектно-ориентированное программирование
- •7.1. Основные понятия
- •7.2. Создание пользовательского интерфейса
- •7.3. Установка свойств объектов и определение методов
- •7.4. Составление программного кода
- •7.5. Создание пользовательского приложения с использованием формы
- •7.5.1. Создание формы
- •7.5.2. Разработка программного кода
- •8. Циклические вычислительные процессы
- •8.1. Понятие цикла
- •8.2. Арифметический цикл
- •8.2.1. Цикл с разветвлением
- •8.2.2. Цикл со счетчиком. Вычисление максимума и минимума
- •8.2.3. Вложенные циклы
- •8.3. Вычисление сумм и произведений
- •8.4. Итерационные циклы
- •8.4.1. Операторы цикла Do … Loop
- •9. Модульное программирование.
- •9.1. Понятие процедуры
- •9.2. Параметры процедур – формальные и фактические
- •9.3. Разработка процедур-функций
- •9.4. Разработка процедур-подпрограмм
- •9.5. Срочный выход из процедур и циклов
- •10. Переменные с индексами. Одномерные массивы
- •10.1. Понятие массива
- •10.2. Ввод массива
- •10.2.1. Считывание массива с листа Excel
- •10.2.2. Заполнение массива случайными числами
- •10.3. Вывод массива
- •10.4. Решение задач с использованием массивов
- •644046, Г. Омск, пр. Маркса, 35
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
