Параметры, передающиеся по значению и по ссылке
Параметры, передающиеся по значению, – это параметры, значения которых передаются в подпрограмму и не передаются из нее обратно. Перед такими параметрами ставится оператор ByVal. Параметры, передающиеся по ссылке, – это параметры, значения которых вычисляются в подпрограмме и передаются из нее в другие подпрограммы. Перед такими параметрами ставится оператор ByRef. Рассмотрим несколько примеров использования подпрограммы-процедуры.
Пример 1 Сформировать три матрицы A(K, K), B(L, L), C(M,M) на разных листах Excel. Размерность у каждой матрицы своя.
Матрицы должны иметь вид
Программный код
Option Explicit Dim i As Integer, j As Integer ‘ описание глобальных параметров Sub PR28() Dim a(1 To 10, 1 To 10) As Integer Dim b(1 To 10, 1 To 10) As Integer Dim c(1 To 10, 1 To 10) As Integer Dim K As Integer, L As Integer, M As Integer K = Val(InputBox("Введи K")) L = Val(InputBox("Введи L")) M = Val(InputBox("Введи M")) F K, a ‘ вызов подпрограммы F для массива a F L, b ‘ вызов подпрограммы F для массива b F M, c ‘ вызов подпрограммы F для массива c Worksheets("Лист1").Select ‘ переходим на Лист1 W K, a ‘ вызов подпрограммы W для массива a Worksheets("Лист2").Select ‘ переходим на Лист2 W L, b ‘ вызов подпрограммы W для массива b Worksheets("Лист3").Select ‘ переходим на Лист3 W M, c ‘ вызов подпрограммы W для массива c End Sub Private Sub F(ByVal n As Integer, ByRef x() As Integer) For i = 1 To n ‘ формирование матрицы For j = 1 To n x(i, j) = 0 If i = j Then x(i, j) = i If i + j = n + 1 Then x(i, j) = n + 1 – i Next j Next i End Sub Private Sub W(ByVal n As Integer, ByRef x() As Integer) Range(Cells(1, 1), Cells(10, 10)).Select Selection.Clear Cells(1, 1).Select For i = 1 To n ‘ вывод матрицы For j = 1 To n Cells(i, j) = x(i, j) Next j Next i End Sub
Пример 2 Прочитать три матрицы с разных листов Excel. В каждой матрице вычислить максимальный элемент, а затем найти сумму этих максимумов.
Программный код
Option Explicit Dim i As Integer, j As Integer ‘ описание глобальных параметров Sub PR29() Dim a(1 To 10, 1 To 10) As Integer Dim b(1 To 10, 1 To 10) As Integer Dim c(1 To 10, 1 To 10) As Integer Dim K As Integer Dim L As Integer Dim M As Integer Dim MaxA As Integer Dim MaxB As Integer Dim MaxC As Integer Dim S As Integer K = Val(InputBox("Введи K")) L = Val(InputBox("Введи L")) M = Val(InputBox("Введи M")) Worksheets("Лист1").Select ‘ переходим на Лист1 Wwod K, a ‘ вызов подпрограммы Wwod для матрицы a Worksheets("Лист2").Select ‘ переходим на Лист2 Wwod L, b ‘ вызов подпрограммы Wwod для матрицы b Worksheets("Лист3").Select ‘ переходим на Лист3 Wwod M, c ‘ вызов подпрограммы Wwod для матрицы c Max K, a, MaxA ‘ вызов подпрограммы Max для матрицы a Max L, b, MaxB ‘ вызов подпрограммы Max для матрицы b Max M, c, MaxC ‘ вызов подпрограммы Max для матрицы c S = MaxA + MaxB + MaxC MsgBox ("MaxA=" & MaxA) MsgBox ("MaxB=" & MaxB) MsgBox ("MaxC=" & MaxC) MsgBox ("S=" & S) End Sub Private Sub Wwod(ByVal n As Integer, ByRef x() As Integer) For i = 1 To n ‘ ввод матрицы For j = 1 To n x(i, j) = Cells(i, j) Next j Next i End Sub Private Sub Max(ByVal n As Integer, ByRef x() As Integer, ByRef max1 As Integer) max1 = –32000 For i = 1 To n For j = 1 To n If x(i, j) > max1 Then max1 = x(i, j) Next j Next i End Sub
Пример 3 С помощью счетчика случайных чисел заполнить две матрицы на разных листах Excel и в каждой матрице упорядочить по возрастанию элементы каждой строки. Полученные матрицы вывести на те же листы Excel.
Программный код
Option Explicit Dim i As Integer, j As Integer ‘ описание глобальных параметров Sub PR30() Dim x(1 To 10, 1 To 10) As Integer Dim y(1 To 10, 1 To 10) As Integer Dim K As Integer, L As Integer K = Val(InputBox("Введи K")) L = Val(InputBox("Введи L")) Worksheets("Лист1").Select Matr K, x Worksheets("Лист2").Select Matr L, y End Sub Private Sub Matr(ByVal n As Integer, ByRef a() As Integer) Dim M, R As Integer Range(Cells(1, 1), Cells(10, 10)).Select Selection.Clear Cells(1, 1).Select ‘ заполнение матрицы For i = 1 To n For j = 1 To n Cells(i, j) = Int(Rnd * 100 – 50) a(i, j) = Cells(i, j) Next j Next i ‘ сортировка For i = 1 To n For M = 1 To n – 1 For j = 1 To n – M If a(i, j) > a(i, j + 1) Then R = a(i, j) a(i, j) = a(i, j + 1) a(i, j + 1) = R End If Next j Next M Next i ‘ вывод на лист Excel новой матрицы Cells(i, 2) = "полученная матрица" For i = 1 To n For j = 1 To n Cells(i + 1 + n, j) = a(i, j) Next j Next i End Sub
Подпрограмма-функция
Подобно подпрограмме-процедуре Sub, подпрограмма-функция Function является самостоятельной подпрограммой, которая может получать аргументы, выполнять последовательность инструкций и изменять значения своих аргументов. В отличие от подпрограммы-процедуры подпрограмма-функция может применяться в правой части выражения, как и любая другая встроенная функция, например косинус или синус угла. Подпрограмма-функция возвращает один результат и он должен быть присвоен имени этой функции.
Синтаксис: [Public | Private] [Static] Function Имя [(Список аргументов)] As Тип Тело подпрограммы Имя = Выражение End Function Подпрограмма-функция вызывается в выражении по своему имени, за которым следует список аргументов в скобках:
Переменная = Имя подпрограммы-функции(Список аргументов)
Пример 1 Даны действительные числа s, t. Получить значение выражения
,
где
Программный код
Option Explicit Sub PR31() Dim s As Double Dim t As Double Dim f As Double s = Val(InputBox("Введи s")) t = Val(InputBox("Введи t")) f = Q(1.2, s) + Q(t, s) – Q(2 * s – 1, s * t) MsgBox("f=" & f) End Sub Private Function Q(ByVal a As Double, ByVal b As Double) As Double Q = (a^2 + b^2) / (a^2 + 2 * a * b + 3 * b^2 + 4) End Function
Пример 2 Известна заработная плата сотрудников двух отделов. Вычислить среднюю заработную плату сотрудников в каждом отделе и определить, где она больше и насколько.
Программный код
Option Explicit Dim i As Integer ‘ Описание глобальных параметров Sub PR32() Dim x(1 To 100) As Double Dim y(1 To 100) As Double Dim N As Integer Dim M As Integer Dim Sz1 As Double Dim Sz2 As Double N = Val(InputBox("Введите количество сотрудников 1-го отдела")) M = Val(InputBox("Введите количество сотрудников 2-го отдела")) Sz1 = Sz(N, x, 2) Sz2 = Sz(M, y, 4) MsgBox("Средняя зарплата сотрудников 1-го отдела =" & Sz1) MsgBox("Средняя зарплата сотрудников 2-го отдела =" & Sz2) If Sz1 > Sz2 Then MsgBox("В 1-м отделе средняя зарплата больше") If Sz2 > Sz1 Then MsgBox("Во 2-м отделе средняя зарплата больше") If Sz1 = Sz2 Then MsgBox("Средняя зарплата в отделах одинакова") End Sub Private Function Sz(ByVal k As Integer, ByRef a() As Double, ByVal k1 As Integer) As Double Dim s As Double ‘ описание промежуточной переменной s = 0 For i = 1 To k ‘ считывание данных и заполнение массива A(i) = Cells(k1, i) s = s + a(i) ‘ вычисление общей суммы Next i Sz = s / k ‘ вычисление средней зарплаты End Function
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (268)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |