- •Е. А. Сидорова, п. С. Челобанов основы программирования на 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.2.3. Вложенные циклы
Часто в инженерных задачах возникает необходимость рассчитать значения функции при различных значениях входящих в нее констант, т. е. получить семейство характеристик. Для этой цели используют вложенные циклы.
При организации вложенных циклов необходимо выполнять важное условие – внутренний цикл должен полностью находиться внутри внешнего цикла, т. е. пересечение циклов недопустимо. Кроме того, имена параметров для циклов, вложенных один в другой, должны быть разными.
Вложенные циклы могут состоять из операторов как одного типа, так и разных.
Пример организации вложенных циклов:
For x = …
[Операторы…]
Тело
внутреннего цикла
Тело
внешнего цикла
For
y
= …
[Операторы…]
Next y
[Операторы…]
Next x
Пример ЦВ1. Составить таблицу умножения чисел от 1 до 9.
Схема алгоритма решения задачи с использованием вложенного цикла (в краткой форме) приведена на рис. 24. Программа для составления таблицы умножения имеет вид: Sub Пример_ЦВ1() 'Таблица умножения Dim i As Byte, j As Byte 'Объявление переменных For i = 1 To 9 'Заголовок внешнего цикла For j = 1 To 9 'Заголовок внутреннего цикла Debug.Print i * j ; 'Символ «;» – для 'подавления перехода на новую строку Next j 'Конец внутреннего цикла Debug.Print 'Переход на новую строку Next i 'Конец внешнего цикла End Sub |
|
|
Пример
ЦВ2. Вычислить:
где a = 7÷9, ∆a = 0,5; x = 10÷20, ∆x = 2, и организовать вывод результатов расчета на лист Excel в три столбца по образцу рис. 25. Графическая схема алгоритма решения задачи с изображением цикла в полной форме приведена на рис. 26, а в краткой – на рис. 27. Программа расчета значений функции y с последовательным выводом результатов в три столбца на лист Excel имеет вид: |
Рис. 25. Фрагмент листа Excel с выводом результатов в три столбца |
|
Sub Пример_ЦВ2_стб() 'Семейство характеристик (вывод в три столбца)
Worksheets("Лист1").Select 'Выбор рабочего листа "Лист1"
Range("A:IV").Clear 'Очистка рабочего листа Excel
Dim a As Single, x As Byte, y As Single, nstr As Byte
nstr = 1 'Установка начальной строки вывода
Cells(nstr, 1) = "a" : Cells(nstr, 2) = "x" : Cells(nstr, 3) = "y" 'Заголовки столбцов
For a = 7 To 9 Step 0.5 'Заголовок внешнего цикла (по a)
For x = 10 To 20 Step 2 'Заголовок внутреннего цикла (по x)
y = (Exp(a) + Sqr(x)) / (2 * a) 'Расчет значения y
nstr = nstr + 1 'Наращивание номера строки
Cells(nstr, 1) = a : Cells(nstr, 2) = x 'Вывод значений a и x
Cells(nstr, 3) = y 'Вывод результата y
Next x 'Конец внутреннего цикла
nstr = nstr + 1 'Для пропуска строки перед очередным значением a
Next a 'Конец внешнего цикла
End Sub
|
|
Рассмотрим тот же пример ЦВ2, но с выводом результатов на лист Excel в виде таблицы значений по образцу рис. 28.
Рис. 28. Фрагмент листа Excel с выводом результатов в виде таблицы
Программа в этом случае имеет вид:
Sub Пример_ЦВ2_табл() 'Семейство характеристик (вывод в таблицу)
Worksheets("Лист1").Select 'Выбор рабочего листа "Лист1"
Range("A:IV").Clear 'Очистка рабочего листа
Dim a As Single, x As Byte, y As Single
Dim nstr As Byte 'Номер строки для вывода
Dim nstb As Byte 'Номер столбца для вывода
Cells(1, 1) = "x"
nstr = 1 'Установка начальной строки вывода
For x = 10 To 20 Step 2 'Цикл вывода столбца значений x
nstr = nstr + 1
Cells(nstr, 1) = x
Next x
nstb = 1 'Установка начального столбца вывода
For a = 7 To 9 Step 0.5 'Заголовок внешнего цикла (по a)
nstb = nstb + 1 'Наращивание номера столбца
nstr = 1 'Номер первой строки в столбце вывода
Cells(nstr, nstb) = "a=" & a 'Вывод заголовка столбца
For x = 10 To 20 Step 2 'Заголовок внутреннего цикла (по x)
y = (Exp(a) + Sqr(x)) / (2 * a) 'Расчет значения y
nstr = nstr + 1 'Наращивание номера строки
Cells(nstr, nstb) = y 'Вывод результата y
Next x 'Конец внутреннего цикла
Next a 'Конец внешнего цикла
End Sub
Пример ЦВ3. Вычислить: ,
где a = {2,5; 3,45; 1,6}, x = 10÷20, ∆x = 2.
Этот пример повторяет пример ЦВ2 за исключением того, что переменная a изменяется не с постоянным шагом, а принимает заданные значения. Если параметр цикла изменяется не с постоянным шагом, а принимает произвольные значения, то используется цикл со счетчиком (см. п. 8.2.2).
ГСА решения данной задачи приведена на рис. 29. В отличие от примера ЦВ2 (см. рис. 27) внешний цикл здесь организован по переменной k, являющейся счетчиком количества значений переменной a. Текст программы имеет вид (комментарием (*) отмечены строки, отличающиеся от Примера_ЦВ2_стб):
|
Sub Пример_ЦB3_стб() 'Семейство характеристик и 'цикл со счетчиком Worksheets("Лист1").Select Range("A:IV").Clear Dim a As Single, x As Byte Dim y As Single, nstr As Byte Dim k As Byte '(*) nstr = 1 Cells(nstr, 1) = "a" : Cells(nstr, 2) = "x" Cells(nstr, 3) = "y" For k = 1 To 3 '(*) a = Val(InputBox("Введите a")) '(*) For x = 10 To 20 Step 2 y = (Exp(a) + Sqr(x)) / (2 * a) nstr = nstr + 1 Cells(nstr, 1) = a : Cells(nstr, 2) = x Cells(nstr, 3) = y Next x nstr = nstr + 1 Next k '(*) End Sub |
