导读:
这是我在博客园的处女作,写的肯定不好,高手别见笑。有错误的地方,欢迎批评指正,谢谢大家支持!
有时候需要对数组进行操作,这就要求函数能够用数组作为参数,并能返回一个数组。比如说要编写一个函数,用于计算两个矩阵的乘法,这两个参数必须是两个二维数组,并且返回值也要是一个二维数组,本文就以计算矩阵乘法为例,写了一个函数,大家一起讨论讨论。
代码如下:
'计算两个矩阵乘法
'矩阵为整型
Public Function iMUL()Function iMUL(a() As Integer, b() As Integer) As Variant
Dim i, j, k As Integer
If UBound(a, 2) <> UBound(b, 1) Then
MsgBox "参数错误,请输入两个可以相乘的矩阵!"
End
End If
Dim c() As Integer
ReDim c(UBound(a, 1), UBound(b, 2))
For i = 0 To UBound(a, 1)
For k = 0 To UBound(b, 2)
c(i, k) = 0
For j = 0 To UBound(a, 2)
c(i, k) = c(i, k) + a(i, j) * b(j, k)
Next j
Next k
Next i
iMUL = c
End Function
算法就不必说了,学过线代的都看得懂。
因为我是菜鸟,所以写点我在写这个函数的时候碰到的一些小问题,希望能对广大菜鸟们有一些帮助:
由于返回的是一个数组,所以函数必须申明为变体类型是(variant),当然,不指明也可.
函数的参数是数组,必须是引用参数,可以在前面加上byref,不加VB也能认出这是数组,会默认为byref.
数组C用于保存返回的数组,必须申明为动态数组,也必须Redim它的大小,如果直接申明它的大小会报错,大家试试看就 知道了。
好了,今天就写到这里了,下次再发一个求逆阵的算法,也是矩阵作参数,不过重点是算法。
感谢 blueskit 的指点,将函数声明为Integer()是可以的.也建议大家这样做。我之所以会用Vriant是因为我没有想到在类型后加上括号可以表示一个数组类型。
本文转自
http://www.cnblogs.com/wanglonghao/archive/2007/11/15/958465.html
这是我在博客园的处女作,写的肯定不好,高手别见笑。有错误的地方,欢迎批评指正,谢谢大家支持!
有时候需要对数组进行操作,这就要求函数能够用数组作为参数,并能返回一个数组。比如说要编写一个函数,用于计算两个矩阵的乘法,这两个参数必须是两个二维数组,并且返回值也要是一个二维数组,本文就以计算矩阵乘法为例,写了一个函数,大家一起讨论讨论。
代码如下:
'计算两个矩阵乘法
'矩阵为整型
Public Function iMUL()Function iMUL(a() As Integer, b() As Integer) As Variant
Dim i, j, k As Integer
If UBound(a, 2) <> UBound(b, 1) Then
MsgBox "参数错误,请输入两个可以相乘的矩阵!"
End
End If
Dim c() As Integer
ReDim c(UBound(a, 1), UBound(b, 2))
For i = 0 To UBound(a, 1)
For k = 0 To UBound(b, 2)
c(i, k) = 0
For j = 0 To UBound(a, 2)
c(i, k) = c(i, k) + a(i, j) * b(j, k)
Next j
Next k
Next i
iMUL = c
End Function
算法就不必说了,学过线代的都看得懂。
因为我是菜鸟,所以写点我在写这个函数的时候碰到的一些小问题,希望能对广大菜鸟们有一些帮助:
由于返回的是一个数组,所以函数必须申明为变体类型是(variant),当然,不指明也可.
函数的参数是数组,必须是引用参数,可以在前面加上byref,不加VB也能认出这是数组,会默认为byref.
数组C用于保存返回的数组,必须申明为动态数组,也必须Redim它的大小,如果直接申明它的大小会报错,大家试试看就 知道了。
好了,今天就写到这里了,下次再发一个求逆阵的算法,也是矩阵作参数,不过重点是算法。
感谢 blueskit 的指点,将函数声明为Integer()是可以的.也建议大家这样做。我之所以会用Vriant是因为我没有想到在类型后加上括号可以表示一个数组类型。
本文转自
http://www.cnblogs.com/wanglonghao/archive/2007/11/15/958465.html