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

 

Параметры, передающиеся по значению, – это параметры, значения которых передаются в подпрограмму и не передаются из нее обратно. Перед такими параметрами ставится оператор 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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.018 сек.