- •Е. А. Сидорова, п. С. Челобанов основы программирования на 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. Циклические вычислительные процессы
8.1. Понятие цикла
Часто при решении задач приходится многократно выполнять вычисления по одним и тем же формулам с разными исходными данными. Например, нужно составить программу расчета значений функции y = sin x при x = 0; 0,1; 0,2; …; 1. Очевидно, что для определения всех значений функции y необходимо вычислять и выводить на экран монитора 11 раз значение sin x, начиная с x = 0 и увеличивая каждый раз аргумент x на 0,1. При решении данной задачи целесообразно использовать циклический алгоритм, реализуемый с помощью специальных операторов циклов.
Цикл – это конструкция в программировании, позволяющая неоднократно выполнять одну и ту же последовательность операторов внутри программы.
Циклические алгоритмы делятся на арифметические и итерационные.
Цикл называется арифметическим, если количество его повторений заранее известно или может быть легко вычислено (другие названия арифметического цикла – цикл с известным числом повторений, регулярный, счетный, цикл с параметром).
Цикл называется итерационным, если число его повторений заранее неизвестно, например, он заканчивается при выполнении некоторого условия.
8.2. Арифметический цикл
Рассмотрим реализацию арифметического цикла на простом примере.
Пример Ц1. Вычислить значения y = sin x , если 0 ≤ x ≤ 1 и Δx = 0,1.
Данный пример является примером табулирования функции – вычисления множества значений функции при различных значениях входящих в нее аргументов.
С
оставим
ГСА решения этой задачи на основе
знаний, полученных при изучении
темы
«Разветвляющиеся вычислительные
процессы» (рис. 18). В блоке 2 задается
начальное значение аргумента x,
в блоке 3 осуществляется сравнение
текущего значения x
с конечным, затем выполняются расчет
и вывод результата. В блоке 6 значение
x
наращивается, и весь процесс повторяется
до тех пор, пока текущее значение x
не превысит конечное.
П
редставленную
ГСА можно реализовать в программе на
языке VBA,
используя операторы условного перехода
If
и безусловного перехода GoTo.
Однако в программировании для описания
арифметического цикла предусмотрены
более эффективные инструменты. Обычно
такой цикл в ГСА изображают в компактном
виде (рис. 19), используя для этого символ
модификации
(блок 2 на рис. 19), в котором указывают
параметр цикла, его начальное и конечное
значения и шаг изменения. Таким образом,
блок 2, реализующий цикл в краткой форме
ГСА, объединяет в себе блоки 2, 3 и 6 полной
формы ГСА.
Для реализации арифметического цикла в программе на VBA используют оператор For … Next, который записывается в виде:
For x = xнач To xкон [Step ∆x] 'Заголовок
'цикла (означает: «Для x, изменяющегося
'от xнач до xкон с шагом ∆x»)
… 'Операторы (тело цикла)
Next [x] 'Возврат к началу цикла
Здесь x – управляющая переменная (параметр) цикла;
xнач , xкон , ∆x – константы, переменные или арифметические выражения, которые задают соответственно начальное, конечное значения и шаг изменения (приращение) параметра цикла.
Если шаг ∆x = 1, то ключевое слово Step и параметр ∆x можно опустить.
Количество повторений цикла n можно вычислить по формуле:
(2)
Цикл For…Next выполняется следующим образом. Начиная от начального значения параметра цикла xнач при каждом очередном повторении цикла к текущему значению параметра цикла x добавляется шаг его изменения ∆x. Если значение x не превысило конечного значения xкон, то выполняется тело цикла, затем осуществляется возврат к его началу, и цикл повторяется. После того как x станет больше xкон, управление передается оператору, следующему за Next.
Если в заголовке цикла нарушено условие выполнимости цикла, т. е. начальное значение параметра цикла больше конечного при положительном значении шага (или, наоборот, меньше при отрицательном значении шага), то тело цикла не выполняется и управление сразу передается оператору, следующему за оператором Next. Если значение шага окажется равным нулю, то цикл будет выполняться бесконечно долго, т. е. произойдет зацикливание.
Составим простейший вариант программы на языке VBA для примера Ц1 с использованием оператора For…Next:
Sub Пример_Ц1() 'Простой арифметический цикл
Dim x As Single
Dim y As Single
For x = 0 To 1.01 Step 0.1
y = sin(x)
Debug.Print x, y
Next x
End Sub
Обычно вывод результатов в циклических процессах осуществляют на лист Excel. Приведем соответствующую программу в общем виде:
Sub Пример_Ц1() 'Табуляция функции
Worksheets("Лист1").Select 'Выбор рабочего листа "Лист1"
Range("A:C").Clear 'Очистка столбцов с A по C на листе Excel
Const xN = 0, xK = 1, Dx = 0.1
'xN – начальное значение параметра цикла
'xK – конечное значение параметра цикла
'Dx – шаг изменения параметра цикла
Dim x As Single, y As Single, nstr As Byte
'x – параметр цикла (управляющая переменная цикла)
'nstr – счетчик строк на листе Excel
nstr = 1 'Установка вывода с 1-й строки
Cells(nstr, 1) = " x" 'Вывод заголовков столбцов
Cells(nstr, 2) = " y"
For x = xN To xK + Dx / 10 Step Dx 'Заголовок цикла
'(конечное значение xK + Dx / 10 – для учета погрешности дробных чисел)
y = Sin(x) 'Расчет значения y
nstr = nstr + 1 'Наращивание номера строки
Cells(nstr, 1) = x 'Вывод значения x в 1-й столбец
Cells(nstr, 2) = y 'Вывод значения y во 2-й столбец
Next x
End Sub
Таким образом, при составлении ГСА и программ циклических процессов нужно уметь выделять начальное значение параметра цикла, конечное значение параметра цикла или условие окончания цикла, закон изменения (приращение) параметра цикла, тело цикла.
Замечания по применению арифметических циклов:
параметр цикла в операторах For и Next должен быть одинаковым (или после Next параметр цикла можно вообще не указывать);
если конечное значение параметра цикла меньше начального, то шаг изменения параметра цикла должен быть отрицательным;
не рекомендуется изменять внутри цикла значение параметра цикла или пределы его изменения;
запрещается вход в цикл, минуя оператор For, т. е. недопустима передача управления извне на операторы, составляющие тело цикла. Это приведет к ошибке «Next без For»;
допускается выход из цикла в любое время с помощью операторов GoTo или Exit For;
если при организации цикла используются дробные числа, то за счет погрешности их представления возможна ситуация, когда последнее значение параметра цикла не будет получено. В этом случае вместо xкон обычно используют значение xкон + ∆x / 10, как выполнено в примере Ц1;
при выходе из цикла сохраняется текущее значение параметра цикла, которое обычно на один шаг больше конечного значения.
