Вычисление суммы, произведения, количества, минимума и максимума в двумерных массивах
Сумма, произведение, количество, минимум и максимум в двумерных массивах вычисляются точно так же, как и в одномерных, только после задания начальных значений нужно открыть не один, а два цикла (по строкам и по столбцам).
S = 0 : P = 1 : K = 0 : Min = 32000 : Max = – 32000
For i = 1 To N
For j = 1 To N
S = S + x(i, j)
P = P * x(i, j)
K = K + 1
If x(i, j) < Min Then Min = x(i, j)
If x(i, j) > Max Then Max = x(i, j)
Next j
Next i
Пример
Задана целочисленная матрица X(5, 5). Вычислить значение выражения
,
где Р – произведение четных элементов матрицы; S – сумма нечетных элементов; Max – максимальный из положительных элементов; iMin, jMin – номера строки и столбца минимального элемента матрицы.
Программный код
Option Explicit
Sub PR23()
Dim X(5, 5) As Integer
Dim i As Integer, j As Integer
Dim T As Double, S As Double
Dim P As Double, Q As Double
Dim Max As Integer, Min As Integer
Dim iMin As Integer, jMin As Integer
‘ очистка ячеек электронной таблицы
Range(Cells(1, 1), Cells(100, 100)).Select
Selection.Clear
Cells(1, 1).Select
Randomize
For i = 1 To 5 ‘ ввод матрицы
For j = 1 To 5
Cells(i, j) = Int(Rnd * 100 – 50)
X(i, j) = Cells(i, j)
Next j
Next i
P = 1: S = 0: Max = –32000: Min = 32000
For i = 1 To 5
For j = 1 To 5
If X(i, j) Mod 2 = 0 Then P = P * X(i, j)
If X(i, j) Mod 2 <> 0 Then S = S + X(i, j)
If X(i, j) > 0 And X(i, j) > Max Then Max = X(i, j)
If X(i, j) < Min Then
Min = X(i, j)
iMin = i
jMin = j
End If
Next j
Next i
T = P * S – Max * iMin * jMin
If T >= 0 Then
Q = Sqr(T)
MsgBox ("Q=" & Q)
Else
MsgBox ("нет решения")
End If
End Sub
Подпрограммы
При написании длинных программ рационально использовать подпрограммы.
Подпрограмма – это отдельный блок, который может восприниматься как отдельная программа. В VBA существует два вида подпрограмм: подпрограмма-процедура и подпрограмма-функция.
Подпрограмма-процедура
Подпрограмма-процедура может вычислять одно значение, несколько значений или не производить никаких вычислений, а использоваться в качестве программы, выводящей на экран текст или рисунки.
Синтаксис:
[Public | Private] [Static] Sub Имя([Список аргументов])
Тело подпрограммы
End Sub
Элементы описания процедуры рассмотрены в табл. 10.
Таблица 10
Public | Указывает, что процедура Sub доступна для всех других процедур во всех модулях |
Private | Указывает, что процедура Sub доступна для других процедур только того модуля, в котором она описана |
Static | Указывает, что локальные переменные процедуры Sub сохраняются в промежутках времени между вызовами этой процедуры |
Список аргументов | Список переменных, которые передаются в процедуру Sub при ее вызове. Имена переменных разделяются запятой |
Вызов процедуры Sub из другой процедуры можно произвести следующим образом:
Имя процедуры [Список фактических параметров]
Список фактических параметров – это список аргументов, передаваемых процедуре. Он должен соответствовать списку, заданному в описании процедуры, по типу и количеству.
Пример
Основные способы передачи параметров в процедуре.
Option Explicit
Sub PR27()
Dim c As Double
Dim a As Integer
Dim b As Integer
B = 12
For a = 1 To 5
Summa a, b, c
MsgBox("c=" & c)
Next a
End Sub
Sub Summa(ByVal a1, b1 As Integer, ByRef s As Double)
S = a1 + b1
End Sub
В данной программе мы сталкиваемся с несколькими видами параметров:
· глобальные параметры – c, a, b;
· локальные параметры – s, a1, b1;
· параметры, передающиеся по значению – a, b;
· параметры, передающиеся по ссылке – s;
· фактические параметры – a, b, c;
· формальные параметры – a1, b1, s.
Рассмотрим каждый из этих видов параметров.
Локальные и глобальные параметры (переменные)
Параметры, которые используются внутри процедуры, называются локальными, а параметры, которые могут использоваться в любом месте главной программы и в процедуре, называются глобальными.
Формальные и фактические параметры
Описываемые в заголовке процедуры параметры называются формальными, а те параметры, которые подставляются на их место при вызове процедуры, называются фактическими, так как они при выполнении процедуры как бы замещают все формальные. Формальные и фактические параметры должны совпадать по типу и по количеству.