Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Рекурсивные процедуры

Процедура, вызывающая сама себя, называется рекурсивной.

Рекурсия имеет свои области применения.

Пример

Процедура-функция Factorial использует рекурсию при вычислении факториала.

Function Factorial (N)

If N <= 1 Then

Factorial = 1

Else ' Повторный вызов функции, если N > 0.

Factorial = Factorial(N – 1) * N

End If

End Function

Public Sub call_fact()

'Вызывающая процедура

Debug.Print Factorial(5) ‘Распечатка 5!

End Sub

Процедуры выделяют для хранения переменных некоторый объем памяти. При каждом вызове процедурой самой себя выделяется дополнительный объем памяти. Рекурсивная процедура, которая бесконечно вызывает саму себя, как правило, приводит к ошибке, связанной с нехваткой памяти. Например:

Function RunOut(Maximum)

RunOut = RunOut(Maximum)

End Function

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

ЗАПОМНИТЕ

  • Ключевое слово Static обычно не используется при объявлении рекурсивных процедур.

Встроенные функции Классы функций

Язык Visual Basic имеет большое число встроенных функций. Это математические функции, функции для строковых переменных, функции даты и времени, функции преобразования данных, финансовые и информационные функции.

Рис. 5.3. Классы функций и перечень строковых функций

Классы функций можно увидеть в Object Browser, выбрав библиотеку VBA.

Дополнительно можно задать название класса функций на английском языке и выполнить поиск.

Внимание

  • Независимо от русскоязычной или англоязычной версий названия функций VBА и функций рабочего листа в процедурах записываются на английском языке.

Использование табличных функций

Наряду с функциями VBA в процедурах можно использовать встроенные функции рабочего листа. Названия функций VBA и функций рабочего листа часто совпадают, но параметры функций могут различаться. Часть встроенных табличных функций не имеет аналогов в VBA, например, функции Max или Min.

При необходимости использования табличной функции необходимо сделать уточнение при помощи ссылки на объект Application или объект WorksheetFunction.

Пример

Рассчитать максимум из 4-х чисел и их среднее арифметическое.

Public Sub application_func()

'не проверяется корректность ввода

Dim a, b, c,d

a = InputBox("Введите первое число")

b = InputBox("Введите второе число")

c = InputBox("Введите третье число")

d = InputBox("Введите четвертое число")

Debug.Print "Максимум", Application.Max(a, b, c, d)

Debug.Print "Среднее", WorksheetFunction.Average(a, b, c, d)

End Sub

Процедура использует две функции рабочего листа: Max и Average. Приведены оба способа ссылок на функции рабочего листа.