Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сидорова-004.С34.doc
Скачиваний:
91
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

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 можно было включить в число параметров процедуры-функции наравне с другими параметрами.