请大家帮我看看VB里面函数部分哪里错了?

来源:百度知道 编辑:UC知道 时间:2024/09/23 04:24:56
Private Sub Command1_Click()
Dim m%, n%
m = Text1.Text
n = Text2.Text
Call a(m, n)
End Sub

Public Function a(ByVal x As Integer, ByVal y As Integer) As Integer
If x < y Then
t = x: x = y: y = t
r = x Mod y
Do While r <> 0
x = y: y = r: r = x Mod y
Loop
a = y
End If
Picture1.Print x; " "; y; " "; a
End Function

为什么显示的最大公约数结果始终为0啊?哪里错了呢??

存在的问题:
1. 函数引用方式不对。
2. 求最大公约数应该去掉 x<y 的判断,否则当 x>=y 的时候没有结果。估计你的测试数据就是 x>=y 吧,才会导致结果始终为 0。
3. 函数内的变量 r 没有定义(仅建议)

代码如下:
Private Sub Command1_Click()
Dim m%, n%
m = Text1.Text
n = Text2.Text
Picture1.Print m; " "; n; " "; a(m, n)
End Sub

Public Function a(ByVal x As Integer, ByVal y As Integer) As Integer
Dim r As Integer
r = x Mod y
Do While r <> 0
x = y: y = r: r = x Mod y
Loop
a = y
End Function

-----------------------

看了几位的代码,补充一下:
代码原理是欧几里德的辗转相除法,一些老教材的确写着需要交换 x 和 y。
不过,无须判断 x 和 y 的大小,不管谁大谁小都可以求,可以从数学角度论证的。简单的,可以去掉大小判断,直接运行程序试试看。

函数不是这么引用的
看下面
Private Sub Command1_Click()
Dim m%, n% ,x
m = Text1.Text
n = Text2.Text
x=a(m,n)
Picture1.Print m; " "; n; " "; x
End Sub

Public Function a(ByVal x As