Разместить заказ
Вы будете перенаправлены на Автор24

Подпрограммы-процедуры и подпрограммы-функции

8-800-775-03-30 support@author24.ru
Статья предоставлена специалистами сервиса Автор24
Автор24 - это сообщество учителей и преподавателей, к которым можно обратиться за помощью с выполнением учебных работ.
как работает сервис
Все предметы / Программирование / Язык Microsoft Visual Basic for Applications / Подпрограммы-процедуры и подпрограммы-функции
Подпрограммы-процедуры и подпрограммы-функции

При составлении сложных программ очень часто в их различных частях приходится использовать одинаковую последовательность действий, например, вычислять:

$log_a \ x = ln x/ln a $

Замечание 1

При составлении программ по такому алгоритму приходится записывать одну и ту же группу операторов, соответствующих каждому из повторяющихся фрагментов. Для более эффективного программирования подобных повторений в алгоритмических языках предназначены подпрограммы. Повторяемая группа операторов оформляется в виде отдельной программной единицы, которая записывается однократно, а в соответствующих местах основной программы (или подпрограмм) организуются обращения к ней.

Использование подпрограмм позволяет сложную задачу разбить на фрагменты, которые выполняют различные исполнители. Кроме того, подпрограмма может рассматриваться как самостоятельный модуль, который выполнен квалифицированными разработчиками и используется пользователями более низкой квалификации.

Готовые работы на аналогичную тему

В VBA подпрограммы разделяются на:

  • подпрограммы-процедуры – Sub;
  • подпрограммы-функции – Function.

Кроме того, от первоначальных версий BASIC сохранилась конструкция подпрограмм GoSub – Return , которая в настоящее время практически используется.

Подпрограммы-процедуры

Любая процедура может содержать несколько входных параметров, произвольное число операторов и несколько результатов ее выполнения.

Синтаксис процедуры в упрощенной форме имеет вид:

[ Private | Public ] Sub ( список )

End Sub

В данном случае квадратные скобки указывают на необязательный параметр, вертикальная черта – на варианты параметров, выбираемых пользователем. Так, элемент описания Private указывает, что рассматриваемая процедура доступна только из программы и процедур только того модуля, в котором она описана. Элемент описания Public указывает на то, что рассматриваемая процедура доступна для всех программ и процедур во всех модулях.

Список формальных аргументов процедуры условно в рассматриваемом нами примере вычисления логарифма разделим на входные параметры – исходные данные и выходные – результаты счета. Входные параметры в списке будем описывать с ключевым словом ByVal и обязательным указанием типа. Выходные же параметры в списке будем описывать с ключевым словом ByRef и обязательным указанием типа. При таком способе описания входные параметры передаются в процедуру по значению: вначале в вызывающей программе вычисляются значения фактических аргументов и эти значения подставляются в процедуре вместо формальных. Входные параметры могут быть либо постоянными, либо именными постоянными, либо переменными, либо выражениями. Выходные параметры, описанные с ключевым словом ByRef, передаются по адресам в электронной памяти компьютера и должны быть только переменными. После их вычисления в процедуре их значения передаются в вызывающую программу. Отметим, что каждая переменная, которая используется в качестве выходного параметра процедуры с ключевым словом ByRef в вызывающей программе, должна быть описана в ней только в отдельном операторе описания. Вызов процедуры из вызывающей программы осуществляется с помощью оператора:

Call ( фактические переменные )

Так вычисление логарифма по произвольному основанию и образец обращения к процедуре его вычисления можно представить в следующей программе.

Private Sub Workbook_Open()

Const $a = 2, b = 4$

Dim x As Single

Dim y As Single

Dim z As Single

Call Логарифм(a, b, x)

Call Логарифм(a + b, (a + b) ^ 5, y)

Call Логарифм(10, 10000, z)

$Range("A1").Value = x$

$Range("A3").Value = y$

$Range("A5").Value = z$

$x = 2.38 ^ b$

$y = 3.1415926$

Call Логарифм(y, x, z)

$Range("A7").Value = z$

End Sub

Public Sub Логарифм(ByVal основание, аргумент_As Single, ByRef результат _As Single)

результат = Log(аргумент) / Log(основание)

End Sub

Замечание 2

Отметим, что одновременное использование латинского алфавита и кириллицы при написании программ на начальном этапе затруднительно. В приведенном примере это сделано для большей наглядности.

Кроме того, что в процедуре может быть несколько выходных параметров, описанных с ключевым словом ByRef, возможны побочные результаты действия процедур на изменение входных параметров с ключевым словом ByVal, которые мы рассматривать не будем.

Подпрограммы-функции

Определение 1

Подпрограмма-функция – это подпрограмма, результат которой представляет собой единственное значение, присваиваемое имени этой функции.

Подпрограмма-функция имеет следующий синтаксис:

[Public | Private] Function (список) _As

End Function

В местах выхода из подпрограммы-функции должен стоять оператор присваивания:

=

Обращения к подпрограммам-функциям аналогичны обращению к стандартным математическим функциям VBA.

Рассмотрим оформление предыдущего примера в виде подпрограммы-функции и обращения к ней.

Private Sub Workbook_Open()

Const $a = 2, b = 4$

Dim x As Single

Dim y As Single

Dim z As Single

$x = Логарифм(a, b)$

$y = Логарифм(a + b, (a + b) ^ 5)$

$z = Логарифм(10, 10000)$

$Range("A1").Value = x$

$Range("A3").Value = y$

$Range("A5").Value = z$

$x = 2.38 ^ b$

$y = 3.1415926$

$z = Логарифм(y, x)$

$Range("A7").Value = z$

End Sub

Public Function Логарифм(ByVal основание, аргумент _

As Single) As Single

Логарифм = Log(аргумент) / Log(основание)

End Function

Результат счета по приведенным программам одинаковый и имеет вид, представленный на рисунке ниже:

Подпрограммы-процедуры и подпрограммы-функции. Автор24 — интернет-биржа студенческих работ

Замечание 3

Отметим, что в ячейки таблицы в результате выполнения программы выведены следующие значения:

  • в ячейку A1 - значение $log2 4 = 2$;
  • в ячейку A3 – значение $log_{a+b} (a+b)^6 = 5$;
  • в ячейку A5 – значение $lg_{10} 10000 = 4$;
  • в ячейку A7 - значение $log_z 2,38^4$ .