回 帖 发 新 帖 刷新版面

主题:[讨论]请问各位高手,怎样用vb标准模块中的sub过程实现多因变量的输出

请问各位高手,怎样用vb标准模块中的sub过程实现多因变量的输出
例如解方程 x^2 - 3x + 2 = 0, x1 = 1, x2 = 2
在vb标准模块窗口中写入解方程的过程:
Public Sub Solve12(ByVal a As Single, ByVal b As Single, ByVal c As Single, ByVal x1 As Single, ByVal x2 As Single)
    Dim delta As Single
    delta = b * b - 4 * a * c
    If delta >= 0 Then
        x1 = (-b - Sqr(delta)) / 2 / a
        x2 = (-b + Sqr(delta)) / 2 / a
    End If
End Sub
在vb工程代码窗口中写入代码:
Private Sub Command1_Click()
    Dim a As Single, b As Single, c As Single
    a = 1
    b = -3
    c = 2
    Solve12 a, b, c, x1, x2
    Me.Print x1
    Me.Print x2
End Sub
但是运行后在窗体上没有打印出结果。请各位高手指点,多谢。

回复列表 (共6个回复)

沙发

两个问题:

1. x1、x2没有声明;
2. ByVal x1 As Single, ByVal x2 As Single

ByVal是不行的,传值的话原参数就不能修改,将这两个ByVal去掉,也就是要用传址。

板凳

我觉得是否声明x1、x2在本问题中没有影响输出结果的区别。
之所以在程序里不能输出方程的解,使因为没有把结果返回主程序(也就是传值还是传址的问题)。
一般流行不用sub而使用function,这样可以返回标志或者出错信息。
所以,我建议,使用代码如下:

在vb标准模块窗口中写入解方程的过程:
Public Function Solve12(ByVal a As Single, ByVal b As Single, ByVal c As Single, x1 As Single, x2 As Single) As Boolean
    Dim delta As Single
    delta = b * b - 4 * a * c
    If delta < 0 Then
        Solve12 = False                 '标记虚根
        Exit Function
    Else
        Solve12 = True                  '标记实根
        delta = Sqr(delta)              '减少一次开方运算!
        x1 = (-b - delta) / 2 / a
        x2 = (-b + delta) / 2 / a
    End If
End Function


在vb工程代码窗口中写入代码:
Private Sub Command1_Click()
    Dim a As Single, b As Single, c As Single,x1 as single,x2 as single
    dim shi as Boolean
    a = 1
    b = -3
    c = 2
    shigen=Solve12( a, b, c, x1, x2)
    if shigen then
        Me.Print x1
        Me.Print x2
    else
        Me.Print "没有实根!"
    endif
End Sub




3 楼


多谢高手的帮助!

4 楼

虽然来的特别晚了,但是我本来是想查找标准模块与窗体模块变量使用的问题的。


1楼2楼都正确,根本原因就是窗体里没有获得x1,x2的值,按1楼的思路,把你sub里的x1,x2去掉,标准模块里加个public x1,x2声明即可,或者sub里加个form1.print即可;2楼很正确。

5 楼

ok,楼主结贴吧!

6 楼

C易特元亨QQ919169870
最新互助式项目。
这是一个互助的模式。
不推广人也有钱赚的。分A B两个网。
不推广的人在A网。推广的人 在B网。
B网推广的人帮助A网。
A网赚取6000元出局。
B网就多了。
详情了解加QQ919169870 
  http://blog.sina.com.cn/s/blog_6b19ec920100liv6.html
C易特奖励制度 
http://blog.sina.com.cn/cyite6
C易特更多资料博客

我来回复

您尚未登录,请登录后再回复。点此登录或注册