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

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