' Процедура за работа с матрица
Sub Matrix()
Dim Z() As Double
Dim M As Integer, N As Integer
Dim i As Integer, j As Integer
' зареждане на данни от Excel -> Sheet1
Dim W As Worksheet
Set W = Application.Worksheets("Sheet1") ' така може да се избират различни страници
W.Activate
M = 5: N = 5 ' М и N може да се въведат и от клавиатурата
ReDim Z(1 To M, 1 To N)
For i = 1 To M
For j = 1 To N
Z(i, j) = W.Cells(i, j)
Next
Next
' а) сума на всички елементи в матрицата
Dim S As Double
S = 0
For i = 1 To M
For j = 1 To N
S = S + Z(i, j)
Next
Next
MsgBox ("S=" & S)
' б) произведение на всички ненулеви елементи в матрицата
Dim P As Double
P = 1
For i = 1 To M
For j = 1 To N
If Z(i, j) <> 0 Then P = P * Z(i, j)
Next
Next
MsgBox ("P=" & P)
' в) максимум на матрицата и местоположението му (ред и стълб)
Dim Max As Double
Dim imax As Integer, jmax As Integer
Max = Z(1, 1)
imax = 1: jmax = 1
For i = 1 To M
For j = 1 To N
If Z(i, j) > Max Then Max = Z(i, j): imax = i: jmax = j
Next
Next
MsgBox ("Max=Z(" & imax & "," & jmax & ")=" & Max)
' г) минимум на матрицата и местоположението му (ред и стълб)
Dim Min As Double
Dim imin As Integer, jmin As Integer
Min = Z(1, 1)
imin = 1: jmin = 1
For i = 1 To M
For j = 1 To N
If Z(i, j) < Min Then Min = Z(i, j): imin = i: jmin = j
Next
Next
MsgBox ("Min=Z(" & imin & "," & jmin & ")=" & Min)
' д) средно аритметично на положителните елементи над главния диагонал, ако матрицата е квадратна
If M = N Then
Dim Sp As Double, Ap As Double
Dim Np As Integer
Sp = 0: Np = 0
For i = 1 To M
For j = 1 To N
If i < j Then
If Z(i, j) > 0 Then Sp = Sp + Z(i, j): Np = Np + 1
End If
Next
Next
If Np > 0 Then
Ap = Sp / Np
MsgBox ("Ap=" & Ap)
Else
MsgBox ("Няма положителни елементи")
End If
End If
' е) максимум под второстепенния диагонал, ако матрицата е квадратна
If M = N Then
Dim Max2 As Double
Max2 = Z(M, N)
For i = 1 To M
For j = 1 To N
If i + j > N + 1 Then
If Z(i, j) > Max2 Then Max2 = Z(i, j)
End If
Next
Next
MsgBox ("Max2=" & Max2)
End If
' ж) суми по редове на матрицата
Dim SR() As Double
ReDim SR(1 To M)
For i = 1 To M
SR(i) = 0
For j = 1 To N
SR(i) = SR(i) + Z(i, j)
Next
MsgBox ("SR(" & i & ")=" & SR(i))
Next
' з) минимуми по стълбове на матрицата
Dim MinK() As Double
ReDim MinK(1 To N)
For j = 1 To N
MinK(j) = Z(1, j)
For i = 2 To M
If Z(i, j) < MinK(j) Then MinK(j) = Z(i, j)
Next
MsgBox ("MinK(" & j & ")=" & MinK(j))
Next
' и) да се изведат 3те най-малки отрицателни елементи в матрицата, като се използва помощен едномерен масив D
Dim D() As Double
ReDim D(1 To M * N)
Dim L As Integer
L = 0
For i = 1 To M
For j = 1 To N
If Z(i, j) < 0 Then L = 1: D(L) = Z(i, j)
Next
Next
' сортиране на масива D във възходящ ред
Dim C As Double
For i = 1 To L - 1
For j = 1 To L - i
If D(j) < D(j + 1) Then C = D(j + 1): D(j + 1) = D(j): D(j) = C
Next
Next
' извеждане на трите най-малки елементи на масива D
If L >= 3 Then
For i = 1 To 3
MsgBox ("D(" & i & ")=" & D(i))
Next
End If
End Sub
Сподели с приятели: |