Dim row(1 To 4) As Integer
Dim col(1 To 4) As Integer
Dim ss(1 To 4) As Variant
Dim a1 As Variant
Dim a2 As Variant
Dim a3 As Variant
Dim a4 As Variant
Private Sub Form_Load()
a1 = Array(Array(1, 2, 3, 4, 5), Array(5, 4, 6, 2, 1), Array(5, 6, 7, 4, 1), Array(1, 3, 5, 4, 1))
a2 = Array(Array(1, 4, 5), Array(5, 2, 1), Array(5, 6, 7), Array(5, 4, 1), Array(4, 7, 9))
a3 = Array(Array(1, 2, 3, 4, 5, 6, 2), Array(5, 4, 6, 2, 1, 5, 4), Array(5, 6, 7, 4, 1, 6, 1))
a4 = Array(Array(1, 2), Array(5, 1), Array(4, 1), Array(1, 1), Array(2, 2), Array(7, 5), Array(5, 7))
ss(1) = a1
ss(2) = a2
ss(3) = a3
ss(4) = a4
row(1) = 4
col(1) = 5
row(2) = 5
col(2) = 3
row(3) = 3
col(3) = 7
row(4) = 7
col(4) = 2
End Sub
Private Sub Form_click()
Dim lng As Integer
Dim a()
a = Array(4, 5, 3, 7, 2)
lng = UBound(a)
Dim m(1 To 4, 1 To 4) As Long
Dim s(1 To 4, 1 To 4) As Long
ysb a, lng, m, s
'Print
Print tz(1, 4, s)
'Print
lian 1, 4, s
End Sub
Sub ysb(ByRef p, b As Integer, ByRef c As Variant, ByRef d As Variant)
Dim i As Integer
Dim j As Integer
Dim r As Integer
Dim k As Integer
Dim value As Long
For i = 1 To b
c(i, i) = 0
Next
For r = 2 To b
For i = 1 To b - r + 1
j = r + i - 1
c(i, j) = c(i + 1, j) + p(i - 1) * p(j) * p(i)
d(i, j) = i
'Print i, j
For k = i + 1 To j - 1
value = c(i, k) + c(k + 1, j) + p(i - 1) * p(k) * p(j)
If value < c(i, j) Then
c(i, j) = value
d(i, j) = k
End If
Next
'Print c(i, j), d(i, j), i, j
Next
Next
End Sub
Function tz(a As Integer, b As Integer, ByRef x) As String
Dim ss As String
Dim value As Integer
If a = b Then
tz = "A" & a
Else
If a + 1 = b Then
tz = "A" & a & "A" & b
Else
value = x(a, b)
ss = "[" & tz(a, value, x) & "]" + "[" & tz(value + 1, b, x) & "]"
tz = ss
End If
End If
End FunctionFunction cheng(ByRef x, ByRef y, ra As Integer, ca As Integer, rb As Integer, cb As Integer) As Variant
Dim sum As Long
Dim c As Variant
ReDim c(ra, cb)
sum = 0
If ca <> rb Then
MsgBox "矩阵不可乘"
Else
Debug.Print ra, ca, rb, cb
For i = 0 To ra - 1
For j = 0 To cb - 1
sum = x(i)(0) * y(0)(j)
For k = 1 To ca - 1
sum = sum + x(i)(k) * y(k)(j)
Print sum, x(i)(k), y(k)(j)
Nextc(i, j) = sum
Next
Next
cheng = c
End If
End FunctionFunction lian(a As Integer, b As Integer, ByRef x) As Variant
Dim value As Integer
If a = b Then
lian = ss(a)
Else
If b - 1 = a Then
lian = cheng(ss(a), ss(b), row(a), col(a), row(b), col(b))
Else
value = x(a, b)
'Print a, b, value
lian = cheng(lian(a, value, x), lian(value + 1, b, x), row(a), col(value), row(value + 1), col(b))
End If
End If
End Function
Dim col(1 To 4) As Integer
Dim ss(1 To 4) As Variant
Dim a1 As Variant
Dim a2 As Variant
Dim a3 As Variant
Dim a4 As Variant
Private Sub Form_Load()
a1 = Array(Array(1, 2, 3, 4, 5), Array(5, 4, 6, 2, 1), Array(5, 6, 7, 4, 1), Array(1, 3, 5, 4, 1))
a2 = Array(Array(1, 4, 5), Array(5, 2, 1), Array(5, 6, 7), Array(5, 4, 1), Array(4, 7, 9))
a3 = Array(Array(1, 2, 3, 4, 5, 6, 2), Array(5, 4, 6, 2, 1, 5, 4), Array(5, 6, 7, 4, 1, 6, 1))
a4 = Array(Array(1, 2), Array(5, 1), Array(4, 1), Array(1, 1), Array(2, 2), Array(7, 5), Array(5, 7))
ss(1) = a1
ss(2) = a2
ss(3) = a3
ss(4) = a4
row(1) = 4
col(1) = 5
row(2) = 5
col(2) = 3
row(3) = 3
col(3) = 7
row(4) = 7
col(4) = 2
End Sub
Private Sub Form_click()
Dim lng As Integer
Dim a()
a = Array(4, 5, 3, 7, 2)
lng = UBound(a)
Dim m(1 To 4, 1 To 4) As Long
Dim s(1 To 4, 1 To 4) As Long
ysb a, lng, m, s
Print tz(1, 4, s)
lian 1, 4, s
End Sub
Sub ysb(ByRef p, b As Integer, ByRef c As Variant, ByRef d As Variant)
Dim i As Integer
Dim j As Integer
Dim r As Integer
Dim k As Integer
Dim value As Long
For i = 1 To b
c(i, i) = 0
Next
For r = 2 To b
For i = 1 To b - r + 1
j = r + i - 1
c(i, j) = c(i + 1, j) + p(i - 1) * p(j) * p(i)
d(i, j) = i
'Print i, j
For k = i + 1 To j - 1
value = c(i, k) + c(k + 1, j) + p(i - 1) * p(k) * p(j)
If value < c(i, j) Then
c(i, j) = value
d(i, j) = k
End If
Next
'Print c(i, j), d(i, j), i, j
Next
Next
End Sub
Function tz(a As Integer, b As Integer, ByRef x) As String
Dim ss As String
Dim value As Integer
If a = b Then
tz = "A" & a
Else
If a + 1 = b Then
tz = "A" & a & "A" & b
Else
value = x(a, b)
ss = "[" & tz(a, value, x) & "]" + "[" & tz(value + 1, b, x) & "]"
tz = ss
End If
End If
End FunctionFunction cheng(ByRef x, ByRef y, ra As Integer, ca As Integer, rb As Integer, cb As Integer) As Variant
Dim sum As Long
Dim c As Variant
ReDim c(ra, cb)
sum = 0
If ca <> rb Then
MsgBox "矩阵不可乘"
Else
Debug.Print ra, ca, rb, cb
For i = 0 To ra - 1
For j = 0 To cb - 1
sum = x(i)(0) * y(0)(j)
For k = 1 To ca - 1
sum = sum + x(i)(k) * y(k)(j)
Print sum, x(i)(k), y(k)(j)
Nextc(i, j) = sum
Next
Next
cheng = c
End If
End FunctionFunction lian(a As Integer, b As Integer, ByRef x) As Variant
Dim value As Integer
If a = b Then
lian = ss(a)
Else
If b - 1 = a Then
lian = cheng(ss(a), ss(b), row(a), col(a), row(b), col(b))
Else
value = x(a, b)
'Print a, b, value
lian = cheng(lian(a, value, x), lian(value + 1, b, x), row(a), col(value), row(value + 1), col(b))
End If
End If
End Function
For k = 1 To ca - 1
sum = sum + x(i)(k) * y(k)(j)
Print sum, x(i)(k), y(k)(j)
Next
我不知道两种定义数组有什么差别,一个是x()()另一个是c(,)
两给都是二维数组,我把他们的地址混用了。但不知道怎么改正
dim x as variant
x=array(array(1,2,3,4),array(4,5,6,7))
print x(0)(1)
可以输出啊
但是x()()跟c(,)有什么区别怎么把连个的地址联系在一起
用法:z=matmultiply(x,y)
z必须先定义成动态数组:dim z() as double
x,y为两个相乘的矩阵,必须满足矩阵相乘的条件:y的行数等于x的列数Public Function MatMultiply(x() As Double, y() As Double) As Double()
Dim n As Integer
Dim m As Integer
Dim p As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim z() As Double
n = UBound(x, 1)
m = UBound(x, 2)
p = UBound(y, 2)
ReDim z(1 To n, 1 To p)
'ReDim z(n, p)
If m <> UBound(y, 1) Then
MsgBox ("这两个矩阵不能相乘!" + Str$(m) + Str$(UBound(y, 1)))
Else
For i = 1 To n
For j = 1 To m
For k = 1 To p
z(i, k) = z(i, k) + x(i, j) * y(j, k)
Next k
Next j
Next i
End If
MatMultiply = z
End Function