- •Е. А. Сидорова, п. С. Челобанов основы программирования на 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
9.4. Разработка процедур-подпрограмм
При составлении сложных программ часто повторяющиеся действия или фрагменты вычислений выделяют в отдельные подпрограммы, к которым можно многократно обращаться по имени из разных мест программы. Процедура-подпрограмма (ПП) может содержать аргументы, получать входные значения, выполнять любые действия и возвращать любое количество значений, в отличие от функций, которые возвращают только одно значение. Подпрограммы обычно используют для получения или обработки входных данных, отображения результатов или установки свойств объектов.
Синтаксис процедуры-подпрограммы следующий:
Sub Имя_процедуры([a1, a2, …, an])
'Операторы (тело процедуры)
End Sub
где a1, a2, …, an – список формальных параметров ПП, представляет собой перечень имен переменных, значения которых должны быть переданы подпрограмме для ее выполнения.
Для обращения к ПП из любого места программы служит оператор Call:
Call Имя_процедуры([f1, f2, …, fn]),
где f1, f2, …, fn – фактические параметры, которые используются аналогично процедуре-функции.
К подпрограмме можно обратиться другим способом:
Имя_процедуры [f1, f2, …, fn]
В этом случае фактические параметры записываются без круглых скобок.
Если переменные подпрограммы объявлены на уровне модуля, то их можно не включать в число параметров ПП.
В ГСА основной программы обращение к подпрограмме изображается символом «предопределенный процесс» (см. табл. 1), а ГСА подпрограммы изображается отдельно, как для обычной программы.
Пример
ПП1. Вычислить:
,
где z1, z2 – корни квадратного уравнения 5z2 + 20z – 1,5 = 0;
y1, y2 – корни квадратного уравнения 2y2 – y – 7,3 = 0.
Составим подпрограмму korni для решения квадратного уравнения в общем виде ax2 + bx + c = 0, в число ее параметров включим коэффициенты a, b, c и корни x1, x2, которые при каждом обращении к подпрограмме будут иметь конкретные значения. ГСА основной программы и подпрограммы вычисления корней уравнения приведены на рис. 36.
Программный код:
Sub korni(a, b, c, x1, x2) 'Подпрограмма вычисления корней уравнения
Dim D As Single 'Переменная для дискриминанта
D = b ^ 2 – 4 * a * c 'Вычисление дискриминанта
Debug.Print "При коэффициентах "; a; b; c
If D >= 0 Then
x1 = (–b + Sqr(D)) / (2 * a)
x2 = (–b – Sqr(D)) / (2 * a)
Debug.Print " корни "; x1; x2 'Вывод корней
Else
Debug.Print " корней нет" 'Вывод сообщения
End 'Конец работы, если корней нет
End If
End Sub
'-------------------------------------------------
Sub Пример_ПП1( ) 'Основная программа
Dim z1 As Single, z2 As Single, y1 As Single, y2 As Single, u As Single
Call korni(5, 20, –1.5, z1, z2) 'Обращение к ПП для решения 1-го уравнения
Call korni(2, –1, –7.3, y1, y2) 'Обращение к ПП для решения 2-го уравнения
u = Exp(z1 + y1) – Exp(z2 – y2)
Debug.Print "u="; u
End Sub
Коэффициенты уравнений a, b, c можно было задать переменными и вводить их в подпрограмме, а не передавать в качестве параметров.
Пример
ПП2.
Вычислить:
.
Факториал
целого числа k
(k!)
представляет собой произведение
натуральных чисел от 1 до k:
.
Для его вычисления составим подпрограмму
накопления произведения ppf,
параметрами которой являются исходное
число k
и значение факториала f.
ГСА этой подпрограммы аналогична
примеру ЦС2, ГСА основной программы –
примеру ПП1. Программный код имеет вид:
Sub ppf(k, f) 'ПП вычисления факториала k!
Dim i As Byte 'Параметр цикла
f = 1 'Начальное значение произведения
For i = 1 To k
f = f * i 'Накопление произведения
Next i
Debug.Print k; "! = "; f
End Sub
'-------------------------------------------------
Sub Пример_ПП2() 'Основная программа
Dim y As Single, f7 As Integer, f5 As Integer
Call ppf(7, f7) 'Обращение к ПП для вычисления 7!
Call ppf(5, f5) 'Обращение к ПП для вычисления 5!
y = f7 + Sqr(f5)
Debug.Print "y="; y
End Sub
