Параметры, передающиеся по значению и по ссылке
Параметры, передающиеся по значению, – это параметры, значения которых передаются в подпрограмму и не передаются из нее обратно. Перед такими параметрами ставится оператор ByVal. Параметры, передающиеся по ссылке, – это параметры, значения которых вычисляются в подпрограмме и передаются из нее в другие подпрограммы. Перед такими параметрами ставится оператор ByRef.
Рассмотрим несколько примеров использования подпрограммы-процедуры.
Пример 1
Сформировать три матрицы A(K, K), B(L, L), C(M,M) на разных листах Excel.
Размерность у каждой матрицы своя.
Матрицы должны иметь вид
... | N | |||
... | ||||
... | ... | |||
... | ||||
... | N |
Программный код
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
Дата добавления: 2015-11-20; просмотров: 768;