Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
65
Добавлен:
10.04.2015
Размер:
2.87 Mб
Скачать

8.1.2. Создание процедуры-подпрограммы Sub

Синтаксис процедуры-подпрограммы Sub:

Sub Имя_процедуры ([аргументы])

операторы процедуры

End Sub

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

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

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

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

Параметры, передающиеся по ссылке, – это параметры, значения которых вычисляются в подпрограмме и передаются из нее в другие подпрограммы. Перед таким параметром ставится ключевое слово ByRef.

П р и м е р 2. Вычислить: ,

где s1 и k1 – сумма и количество нечетных чисел в диапазоне от 10 до 79;

s2 и k2 – сумма и количество нечетных чисел в диапазоне от –5 до –38.

Программный код

Основная подпрограмма:

Option Explicit

Sub PR2()

Dim s1 As Single, s2 As Single, k1 As Single, k2 As Single

Dim s As Single, n As Integer, m As Integer, k As Integer

Dim f As Single, l As Integer

n = Val(InputBox(“n=”))

‘Начало диапазона

m = Val(InputBox(«m=»))

‘Конец диапазона

l = Val(InputBox(«l=»))

‘Шаг изменения

Call pg (n, m, l, s, k)

‘Обращение к подпрограмме с входными фактическими параметрами: n – начало диапазона, m – конец диапазона, l – шаг изменения; параметры, передаваемые из подпрограммы pg: s – сумма нечетных чисел в диапазоне, k – количество нечетных чисел в диапазоне.

s1 = s: k1 = k

‘Сохранение результатов работы подпрограммы pg (значений s и k)

n = – 5: m = – 38: l = –1

‘Ввод шага и нового диапазона.

Call pg (n, m, l, s, k)

‘Обращение к подпрограмме с новыми данными.

s2 = s: k2 = k

‘Сохранение результатов работы подпрог-раммы pg(значений s и k).

f = s1 * s2 / (k2 – k1) + 35.6

‘Расчет окончательного значения.

MsgBox (“f=” & f)

End Sub

Вызываемая подпрограмма:

Sub pg (ByVal n1 As Integer, ByVal m1 As Integer, ByVal l1 As Integer, ByRef ss As Single, ByRef kk As Integer) ‘n1, m1, l1 – формальные парамет-

ры, передающиеся по значению; ss, kk – параметры, передающиеся по ссылке

Dim I As Integer

ss = 0 : kk = 0

For I = n1 To m1 Step l1

If I Mod 2 <> 0 Then ss = ss + I: kk = kk + 1

Next i

End Sub

Соседние файлы в папке Лаб. работы по VBA