文号
t13216
阅读
10547
回复
15
收藏
7
[VB]运行到这里卡了,麻烦大家指点
2009/03/08
IP:江苏
我想编辑一个可以解出复数根的一元二次方程计算器,结果老是卡在第二个else这里。
麻烦大家帮我看下究竟该怎么改,谢谢!
Private Sub CmdSolve_Click()
    Dim a As Single: a = Val(Text1.Text)
    Dim b As Single: b = Val(Text2.Text)
    Dim c As Single: c = Val(Text3.Text)
    Dim p As Single: p = b ^ 2 - 4 * a * c
    Dim x1 As Single, X2 As Single, e As Single, f As Single
    If a = 0 Then
        Text4.Text = "无解"
        Text5.Text = "无解"
    Else: If p >= 0 Then x1 = (-b + Sqr(p)) / (2 * a): X2 = (-b - Sqr(p)) / (2 * a): Text4.Text = x1: Text5.Text = X2
            Else: e = -b / (2 * a): f = (Sqr(-p)) / (2 * a): Text4.Text = Str(e) & "+" & Str(f) & "i": Text5.Text = Str(e) & "+" & Str(f) & "i"
        End If
    End If
End Sub
17年10个月前IP:未同步
80258
1楼
Private Sub CmdSolve_Click()
Dim a As Single: a = Val(Text1.Text)
Dim b As Single: b = Val(Text2.Text)
Dim c As Single: c = Val(Text3.Text)
Dim p As Single: p = b ^ 2 - 4 * a * c
Dim x1 As Single, X2 As Single, e As Single, f As Single
If a = 0 Then
    Text4.Text = "无解"
    Text5.Text = "无解"
Else
    If p >= 0 Then
        x1 = (-b + Sqr(p)) / (2 * a): X2 = (-b - Sqr(p)) / (2 * a): Text4.Text = x1: Text5.Text = X2
    Else
        e = -b / (2 * a): f = (Sqr(-p)) / (2 * a): Text4.Text = Str(e) & "+" & Str(f) & "i": Text5.Text = Str(e) & "+" & Str(f) & "i"
    End If
End If
End Sub
引用
评论
17年10个月前IP:未同步
80260
2楼
If要写得有条理才好...
引用
评论
17年10个月前IP:未同步
80261
3楼
很混乱啊,习惯不好

不要整天用冒号,要敲回车。您的代码看得真的很辛苦……
引用
评论
17年10个月前IP:未同步
80262
4楼
写程序注意一下格式,这样方便阅读,也方便查错。

Private Sub CmdSolve_Click()
    
Dim a As Single, b As Single, c As Single, p As Single
    Dim
x1 As Single, X2 As Single, e As Single, f As Single
    
a = Val(txtA.Text)
    b = Val(txtB.Text)
    c = Val(txtC.Text)
    p = b ^
2 - 4 * a * c
    
    
If a = 0 Then
        
txtRoot1.Text = "无解"
        
txtRoot2.Text = "无解"
    
Else
         If
p >= 0 Then
            
x1 = (-b + Sqr(p)) / (2 * a)
            X2 = (-b - Sqr(p)) / (
2 * a)
            txtRoot1.Text = x1
            txtRoot2.Text = X2
        
Else
            
e = -b / (2 * a)
            f = (Sqr(-p)) / (
2 * a)
            txtRoot1.Text = Str(e) &
"+" & Str(f) & "i"
            
txtRoot2.Text = Str(e) & "+" & Str(f) & "i"
        
End If
    End If
End Sub
引用
评论
17年10个月前IP:未同步
80263
5楼
楼上的代码很有美感,赞扬一下~
引用
评论
carneades作者
17年10个月前IP:未同步
80265
6楼
改了,还是不行啊。 hx.jpg
引用
评论
17年10个月前IP:未同步
80268
7楼
您多了一个"Else",把您编辑器里的代码全删了,再把我改后的代码粘上去。
引用
评论
17年10个月前IP:未同步
80271
8楼
1.jpg
或者在"Then"后加个回车。
引用
评论
carneades作者
17年10个月前IP:未同步
80272
9楼
搞好了,非常感谢楼上诸位!
我一开始多那么长个尾巴真累最……

请问为什么这里
Text4.Text = x1
Text5.Text = x2
不要Str(x1),而这里
Text4.Text = Str(e) & "+" & Str(f) & "i"
Text5.Text = Str(e) & "-" & Str(f) & "i"
需要Str? hx.jpg
引用
评论
17年10个月前IP:未同步
80278
10楼
因为VB不是C,随便写就是
引用
评论
17年10个月前IP:未同步
80285
11楼
VB有一些变量类型编译器自动给你转了,这容易使人养成坏习惯,所以建议即使有自动转变量类型的功能也最好自己用函数转,以免养成坏习惯。
本人从VB转向C的初期对此极为不适应,习惯养成后就好了。
引用
评论
carneades作者
17年10个月前IP:未同步
80312
12楼
总算捣鼓好了。
我以后又很大可能学C语言。现在先保持Str光荣传统。
attachment icon 一元二次方程计算器2.rar 5.37KB RAR 26次下载
引用
评论
17年10个月前IP:未同步
80349
13楼
用delphi的时候也是这样的 = =
引用
评论
17年10个月前IP:未同步
80435
14楼
用VB随便写都能编译..容易养成坏习惯
引用
评论
17年10个月前IP:未同步
84249
15楼
怎么都用VB?我为什么要去学CPP?
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的