- •Е. А. Сидорова, п. С. Челобанов основы программирования на 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.3. Разработка процедур-функций
Если в расчетах неоднократно встречается выражение одного и того же вида, целесообразно описать его в отдельной процедуре как пользовательскую функцию и затем применять ее в программе наравне со стандартными функциями (sin, cos и др.).
Описание процедуры-функции (ПФ) имеет следующий синтаксис:
Function Имя_Функции([a1, a2, …, an]) [As Тип]
[Операторы …]
Имя_функции = Выражение 'Оператор присваивания результата
[Операторы …]
End Function
где a1, a2, …, an – список формальных параметров (аргументов) ПФ. Все они обязательно должны использоваться в теле функции, иначе задавать их не имеет смысла.
Тип значения ПФ указывается в ее заголовке после списка аргументов.
В теле процедуры-функции должен обязательно присутствовать оператор присваивания результата вычислений переменной с именем, точно совпадающим с именем функции в заголовке этой процедуры. ПФ возвращает вызвавшей ее программе единственное значение, которое определяется Выражением.
В программе обращение к ПФ осуществляется по ее имени:
Имя_функции([f1, f2, …, fn]),
где f1, f2, …, fn – фактические параметры.
В ГСА процедуру-функцию обычно не отражают.
Пример ПФ1. Вычислить:
y = arcsin 0,5 – arcsin3 z + arcsin (b2 – 1) + cos b, где b = 0,3, z = π/6.
Для решения этого примера нужно трижды использовать формулу:
,
подставляя в нее вместо x поочередно значения 0,5, z и (b2 – 1). Опишем эту формулу как процедуру-функцию с формальным параметром x, а затем три раза используем ее с разными фактическими параметрами. Программный код для примера ПФ1 имеет вид:
Function arcsin(x) As Single 'Объявление функции arcsin x
arcsin = Atn(x / Sqr(1 – x ^ 2)) 'Вычисление арксинуса
Debug.Print x, arcsin 'Вывод значений аргумента и функции
End Function
'--------------------------------------------------
Sub Пример_ПФ1() 'Основная программа
Dim b As Single, pi As Single, z As Single, y As Single
b = 0.3 : pi = 3.14 : z = pi / 6
y = arcsin(0.5) – arcsin(z) ^ 3 + arcsin(b ^ 2 – 1) + Sqr(b)
Debug.Print "y="; y 'Вывод результата
End Sub
Пример
ПФ2. Вычислить:
для произвольных b,
x,
y.
Текст программы:
Function lpa(p, a) As Single 'Объявление функции log p по основанию a
lpa = Log(p) / Log(a) 'Вычисление логарифма
Debug.Print p, a, lpa 'Вывод значений аргументов и функции
End Function
'--------------------------------------------------
Sub Пример_ПФ2() 'Основная программа
Dim x As Single, y As Single, b As Single, z As Single
x = InputBox("Введите x")
y = InputBox("Введите y")
b = InputBox("Введите b")
z = (lpa(x, 2) + lpa(y, b)) / (2 * lpa(x + y, b + 2))
Debug.Print "z="; z 'Вывод результата
End Sub
Любое имя переменной, указанное в списке формальных параметров при определении функции, является локальным по отношению к этой функции (эту переменную даже не обязательно объявлять). Это означает, что данная переменная отличается от переменной с тем же именем, указанной в другом месте программы. Она принимает значение, передаваемое ей во время обращения к функции. Другие переменные, фигурирующие в процедуре-функции при ее определении, но не включенные в состав формальных параметров, ничем не отличаются от обычных переменных программы, и во время обращения к ПФ используются их текущие значения.
Пример ПФ3. Для произвольных значений переменных a, b, c, t вычислить:
.
Форма выражений 1, 2 и 3, входящих в заданную формулу, одинакова за исключением степени синуса. Чтобы записать выражение в общем виде, введем для обозначения степени синуса дополнительную переменную n.
Переменная t во всех выражениях встречается идентично, поэтому нет необходимости вводить ее в список формальных параметров ПФ, при обращении к ПФ всегда будет использоваться текущее значение t, но чтобы эта переменная была известна всем процедурам, ее следует объявить в разделе общих объявлений программного модуля.
Запишем выражения 1, 2, 3 в общем виде как функцию трех аргументов:
(исходя
из сказанного выше переменная t
не
включена в список формальных параметров
функции).
Проверим
эту запись: 1) x
= a,
z
= b,
n
= 2 →
.
2)
x = c, z = a, n = 3 →
.
3)
x = b, z = a, n = 4 →
.
Текст программы:
Option Explicit
Dim t As Single 'Объявление переменной t в разделе общих объявлений модуля
'--------------------------------------------------
Function F(x, z, n) As Single 'Объявление пользовательской функции
F = Sqr(x ^ 2 – z ^ 2 + Sin(x) ^ n) + t ^ 2
End Function
'--------------------------------------------------
Sub Пример_ПФ3() 'Основная программа
Dim a As Single, b As Single, c As Single, y As Single
a = InputBox("Введите a") : b = InputBox("Введите b")
c = InputBox("Введите c") : t = InputBox("Введите t")
y = F(a, b, 2) / F(c, a, 3) + F(b, a, 4)
Debug.Print "y="; y 'Вывод результата
End Sub
Переменную t можно было включить в число параметров процедуры-функции наравне с другими параметрами.
