
- •Введение
- •Основные понятия объектно-ориентированного программирования
- •Основные элементы управления в редакторе vba
- •Стандартные приемы программирования в среде vba Введение
- •Отладка программы
- •Основные элементы программного кода в среде vba Описание переменных
- •Константы
- •Операторы присваивания
- •Арифметические выражения
- •Логические выражения
- •Текстовые выражения
- •Линейные программы
- •Оператор перехода
- •Конструкции принятия решений
- •Ветвление по условиям
- •Циклы в программе
- •Массивы
- •Пользовательские процедуры
- •Две основные функции преобразования типов данных
- •Ввод, вывод и генерация исходных данных
- •Приемы работы в среде программирования vba
- •Запуск среды vba
- •Создание функции пользователя
- •Создание макрокоманды (макроса)
- •Создание пользовательской формы
- •Работа с листами книги
- •Лабораторные задания по темам Целочисленное программирование
- •Ввод и вывод данных, оператор присваивания
- •Логические выражения: группа Boolean
- •Условный оператор: группа If
- •Оператор выбора
- •Цикл с параметром: группа For
- •Цикл с условием: группа While
- •Массивы
- •Функции и процедуры
- •Контрольные вопросы
- •Список литературы
- •Содержание
- •420015, Казань, к. Маркса, 68
Циклы в программе
Часто в программах надо повторить часть операторов несколько раз. Для многократного выполнения блока операторов используется один из трех операторов цикла – For … Next:, While … Wend или Dо … Lоор.
Ч
Рис.10. Алгоритм
цикла For
… Next
Цикл For … Nехt используется в том случае, когда количество выполнений заданного блока операторов известно заранее. Алгоритм цикла представлен на рис.10. Данная конструкция имеет следующий синтаксис:
For счетчик = начало To конец [Step шаг]
onepaтopы
Next [счетчик]
При положительном значении величины шаг цикл For … Next работает следующим образом.
Переменной счетчик сначала присваивается значение начало. Далее проверяется условие счетчик > конец. Если результатом проверки этого условия является значение Тruе, то происходит окончание работы цикла. При этом операторы цикла операторы ни разу не выполняются.
Если результатом проверки условия счетчик > конец является False, то в этом случае операторы цикла выполняются первый раз. После этого происходит переход на начало цикла. Далее значение переменной счетчик увеличивается на величину шага шаг, после чего снова проверяется условие счетчик > конец. Если результатом является Falsе, то операторы цикла выполняются второй раз, и т.д.
Выполнение цикла оканчивается, когда результатом проверки условия счетчик > конец становится Тruе. По окончании цикла выполняется оператор, следующий за циклом, т.е. за ключевым словом Next.
Пример. Программа расчета факториал числа 6 имеет следующий вид:
Public Sub Фaкториал1()
Dim I As Byte
Dim F As Long
F = 1
For I = 1 To 6 Step 1
F = F * I
Next I
End Sub
Напомним, что факториал целого положительного числа n обозначается n! и (согласно определению) n! равняется произведению целых чисел от 1 до n: n! = 1 2 ... n.
Для результата отводится ячейка, в которую до начала простого цикла записывается 1, в данном случае F=1.
Пример. Второй вариант программы расчета 6!
Public Sub Фaкториал2()
Dim I As Byte
Dim F As Long
F = 1
For I = 6 To 1 Step -1
F = F * I
Next I
End Sub
В случае отсутствия ключевого слова Step шаг изменения переменной счетчик полагается равным единице.
В качестве параметров цикла начало, конец и шаг можно использовать не только числа, но и арифметические выражения. Важно, чтобы к моменту выполнения цикла For … Next все переменные в этих арифметических выражениях имели числовые значения (были определены).
Зачастую требуется досрочно выйти из цикла. В этом случае цикл For … Next записывается в виде
For счетчик = начало To конец [Step шаг]
onepaтopы1
If условие Then Exit For
onepaтopы2
Next [счетчик]
Досрочное окончание цикла обеспечивается оператором, обозначаемым служебным словосочетанием Exit For. Работает цикл следующим образом.
При каждом значении переменной счетчик после выполнения блока операторы1 компьютер рассчитывает значение логического выражения условие. Если это значение равно False, то работа цикла продолжается. В противном случае работа цикла оканчивается: блок операторы2 не выполняется, а осуществляется переход на оператор, следующий за циклом.
Пример. Четвертый вариант программы расчета 6!
Public Sub Фaктopиал4()
Dim I As Byte
Dim F As Long
F = 1
For I = 1 To 13 Step 1
F = F * I
If I = 6 Then Exit For
Next I
End Sub
Часто в примерах встречается задача накопления суммы, которая решается с помощью оператора цикла. Для результата, как и в случае вычисления произведения, отводится ячейка, в которую перед началом простого цикла записывается ноль, например S=0.
Сумма накапливается в ячейке S путем многократного выполнения оператора присваивания S=S + слагаемое, который располагается внутри простого цикла.
Результат получается в ячейке S по окончании работы простого цикла, т.е. печать S и другие действия с S выполняются после оператора Next.
Пример
Найдите сумму слагаемых вида 5х2, для х, изменяющегося от 5 до 15 с шагом 0,3.
Public Sub Sum()
S=0
For x = 5 To 15 Step 0.3
S=S+5*x^2
Next x
End Sub
Существуют два варианта циклов – первый, который мы подробно рассмотрели ранее, выполняется по счетчику, определяемому в операторе.
Второй вариант оператора – перебор всех объектов в коллекции (это все листы книги, ячейки листа или выделенного диапазона и др.). Этот оператор часто используется для работы со всеми листами книги, которые описаны коллекцией «Sheets» или других объектов.
Записывается оператор следующим образом:
For each Sh in ActiveWorkbook.Sheets
…
Next
Здесь нет в конце имени счетчика, переменная Sh является объектом коллекции.
Цикл применяется в том случае, когда число выполнений операторов цикла заранее неизвестно. Синтаксис этого цикла:
While условие
oпepaторы
Wend
Работа цикла While … Wend начинается с расчета значения логического выражения условие. Если условие = False, то работа цикла заканчивается, т.е. осуществляется переход на оператор, расположенный после ключевого слова Wend. Если условие = Тruе, то выполняются операторы цикла операторы. После этого опять рассчитывается значение логического выражения условие, и т.д.
Пример. Пятый вариант программы расчета 6!
Sub Факториал5()
Dim I As Byte
Dim F As Long
F = 1: I = 1
While I <= 6
F = F * I
I = I + 1
Wend
End Sub
Цикл Do … Lоор, как и цикл While … Wend, применяется, когда число выполнений операторов цикла заранее неизвестно. Он имеет два варианта оформления – с предусловием и постусловием (рис.11).
Рис.11. Алгоритмы цикла Do … Loop с предусловием и постусловием, соответственно.
Для проверки условий используются две формы, которые оформляются служебными словами – While (Пока), когда цикл выполняется пока условие «Истина» и Until (До тех пор), в нем цикл выполняется пока условие «Ложь». Это позволяет легко находить варианты условий. Существует четыре разновидности данной конструкции.
Первой разновидностью является цикл Do While … Lоор, имеющий следующий синтаксис:
Do While условие
операторы
Loop
Работа цикла Do While … Lоор начинается с расчета значения логического выражения условие. Если условие = False, то работа цикла оканчивается, т.е. осуществляется переход на оператор, расположенный после ключевого слова Lоор. Если условие = Тruе, то выполняются операторы цикла операторы. После этого опять рассчитывается значение логического выражения условие, и т.д.
Цикл Do While … Lоор эквивалентен рассмотренному ранее циклу While … Wend.
Пример. Шестой вариант программы расчета 6!
Sub Факториал6()
Dim I As Byte
Dim F As Long
F = 1: I = 1
Do While I <= 6
F = F * I
I = I + 1
Loop
End Sub
Пример. Программа «шагания» по оси координат:
Sub Stepsl()
Dim x As Single
Dim h As Single
h = 0.5 'величина шага равна 0.5
x = 44 'начальное значение х равно 44
Do While x < 55 'конечное значение х равно 55
x = x + h 'значение х увеличивается на h
Loop ‘do while… - делай пока выполняется …
End Sub
Упрощенная форма цикла с предусловием и проверкой по While записывается в форме While X<10: X=X+1: Wend
Вторая разновидность конструкции Do … Lоор ‑ цикл Do Until … Lоор. Синтаксис этого цикла:
Do Until условие
операторы
Lоор
Работа цикла Do Until … Lоор начинается с расчета значения логического выражения условие. Если условие = Тruе, то работа цикла оканчивается, т.е. осуществляется переход на оператор, расположенный после ключевого слова Lоор. Если условие = False, то выполняются операторы цикла операторы. После этого опять рассчитывается значение логического выражения условие, и т.д.
Пример. Второй вариант программы «шагания» по оси координат:
Sub Steps2()
Dim x As Single
Dim h As Single
h = 0.5 'величина шага равна 0.5
x = 44 'начальное значение х равно 44
Do Until x >= 55 'конечное значение х равно 55
x = x + h 'значение х увеличивается на h
Loop 'do until… - делай до выполнения
End Sub
Видно, что в циклах Do While … Lоор и Do Until … Lоор существует ситуация, когда операторы цикла не выполняются ни разу, т.к. условие окончания цикла проверяется перед выполнением этих операторов.
Третья разновидность конструкции Do … Loop ‑ цикл Do … Lоор While ‑ имеет синтаксис
Do
операторы
Loop While условие
Работа цикла Do … Lоор While начинается с выполнения операторов цикла операторы. После этого рассчитывается значение логического выражения условие. Если условие = False, то работа цикла оканчивается. В противном случае опять выполняются операторы цикла, и т.д.
Пример. Третий вариант программы «шагания» по оси координат:
Sub Steps3()
Dim x As Single
Dim h As Single
h = 0.5 'величина шага равна 0.5
x = 44 'начальное значение х равно 44
Do
x = x + h 'значение х увеличивается на h
Loop While x < 55 'конечное значение х равно 55
End Sub
Четвертая разновидность конструкции Do … Loop ‑ цикл Do … Lоор Until ‑ имеет синтаксис
Do
операторы
Loop Until условие
Работа цикла Do … Lоор Until начинается с выполнения операторов цикла операторы. После этого рассчитывается значение логического выражения условие. Если условие = Тruе, то работа цикла оканчивается. В противном случае опять выполняются операторы цикла, и т.д.
Пример. Четвертый вариант программы «шагания» по оси координат:
Sub Steps4()
Dim x As Single
Dim h As Single
h = 0.5 'величина шага равна 0.5
x = 44 'начальное значение х равно 44
Do
x = x + h 'значение х увеличивается на h
Loop Until x >= 55 'конечное значение х равно 55
End Sub
Видно, что в последних двух разновидностях цикла Do … Loop операторы цикла операторы хотя бы один раз обязательно выполняются, т.к. условие окончания цикла проверяется после выполнения этих операторов.
Внутри цикла Do … Loop может находиться оператор Ехit Dо, предназначенный для досрочного выхода из цикла. Употребляется этот оператор так же, как Ехit For в цикле For … Next, ‑ он входит в состав условного оператора.
Отметим, что для цикла While … Wend не существует оператора досрочного выхода из цикла.