注册 登录
编程论坛 VB6论坛

求教大神:编写的一段程序,需要点击好几次才能出现正确结果,求教问题原因。

chenhuliang 发布于 2016-09-18 14:58, 2543 次点击
Sub Command1_Click()
    Form2.Show
End Sub
Private Sub Command3_Click()
Mar = Val(Text1.Text)
Cdc = Val(Text7.Text)
trc = Val(Text2.Text)
M = Val(Text3.Text)
Fin = Val(Text5.Text)
t1 = Val(Label38.Caption)
Cag1 = Val(Text9.Text)
Cs = Val(Text11.Text)
ts = Val(Text8.Text)
Fmff = Val(Text10.Text)
e = Val(Text12.Text)
Ch2o = Val(Text6.Text)
t2 = Val(Text4.Text)
Ca2 = Val(Text13.Text)
Crc = Val(Label37.Caption)
Cdc1 = Val(Text17.Text)
Mpc = Val(Text14.Text)
Qrc = Val(Label40.Caption)
Qev = Val(Label46.Caption)
Fout = Val(Label50.Caption)
Qag1 = Val(Label41.Caption)
Qag2 = Val(Label47.Caption)
Msj = Val(Text16.Text)
Qs = Val(Label42.Caption)
Qf = Val(Label48.Caption)
r = Val(Text15.Text)
Qmac = Val(Label43.Caption)
Qxtsr = Val(Label49.Caption)
V0ut = Val(Label51.Caption)
Qin = Val(Label44.Caption)
Qout = Val(Label39.Caption)
Fr = Val(Label45.Caption)
Qev = (Mar - Mpc) / (100 - Mpc) * M * (2500 + Ch2o * t2 - 4.187 * trc)
Label46.Caption = Qev
Crc = ((100 - Mar) * Cdc + 4.187 * Mar) / 100
Label37.Caption = Crc
Fout = Fin / 1.285 + (Mar - Mpc) / (100 - Mpc) * M / 0.804 + Fmff / 1.285
Label50.Caption = Fout
Qag2 = (Fin + Fmff) * t2 * Ca2
Label47.Caption = Qag2
Qs = ts * Fmff * Cs
Label42.Caption = Qs
Qf = (1 - 0.01 * Mar) * (t2 - trc) * (Cdc1 + 4.187 * Mpc / (100 - Mpc)) * M
Label48.Caption = Qf
Qmac = 2.16 * M * e
Label43.Caption = Qmac
Qrc = Crc * trc * M
Label40.Caption = Qrc
t1 = (Qout - Qmac - Qs - Qrc) / (Fin * Cag1)
Label38.Caption = t1
Qag1 = t1 * Cag1 * Fin
Label41.Caption = Qag1
Qin = Qrc + Qag1 + Qs + Qmac
Label44.Caption = Qin
Qxtsr = 0.02 * Qin
Label49.Caption = Qxtsr
Qout = Qev + Qag2 + Qf + Qxtsr
Label39.Caption = Qout
Fr = Fout * (101.3 / 86.7) * (273 + t2) / 273
Label45.Caption = Fr
Vout = Fr / 3600 / (3.14 * r * r * 4)
Label51.Caption = Vout
End Sub
13 回复
#2
chenhuliang2016-09-18 14:58
#3
chenhuliang2016-09-18 15:03
急求高手解答,万分感谢
#4
xiangyue05102016-09-18 15:57
你这个太多计算了吧。可否简单的说一下是做什么的,也就是你的数学模型。还有提供一下测试使用的输入数据和输入结果。
光从你的代码而言:
前面Label45,Label51……赋值给变量
后面计算出来的结果有传递给Label45,Label51……
既然是你说了需要点击好几下才能出正确的结果,我估计你原来的数学模型应该是需要多次迭代的。
#5
chenhuliang2016-09-18 16:52
回复 4楼 xiangyue0510
是的,这个程序是一个热力平衡计算,其中有好几个变量是需要迭代计算的。现在的问题是:我按照顺序排列好以后,一次计算不能得出最终结果,我要点8-9次才能出正确结果。不知道问题处在哪里了。
#6
chenhuliang2016-09-18 16:54
回复 4楼 xiangyue0510
你有邮箱么?我发程序给你,帮我看看吧,谢谢大神!
#7
pengzhanggui2016-09-18 17:22
写程序养成一个好习惯,或多或少备注一下嘛
#8
pengzhanggui2016-09-18 17:26
【点好几次才出现结果】:

考虑用循环是否可以解决此问题呢?
#9
风吹过b2016-09-18 17:34
简单处理一下加个循环吧。
程序里判断最后计算结果,如果不符合要求,继续计算就是了。

#10
xiangyue05102016-09-18 19:03
回复 5楼 chenhuliang
你这个就对了,这个过程本来就是迭代,最后达到收敛的过程。
只需要简单的修改一下代码就可以实现
程序代码:

Do
'计算过程的代码放进来,可以修改一下不必将中间结果也现在在控件上
if T1=T1p then  '这里放判定收敛的准则
'将最终结果显示
exit do
end if
Loop
#11
chenhuliang2016-09-19 10:04
回复 10楼 xiangyue0510
谢谢大神提供的思路,现在实现了,万分感谢
Private Sub Command4_Click()
Dim i As Integer
For i = 1 To 10
Call Command3_Click
Next i
End Sub
#12
xiangyue05102016-09-19 10:11
回复 11楼 chenhuliang
你现在的做法是做10次迭代,适用性要注意了
如果遇到复杂的问题,未必可以迭代到最终状态哦。
#13
chenhuliang2016-09-19 10:22
回复 12楼 xiangyue0510
嗯嗯,我是个初学者,能得到大神的帮助,受宠若惊啊,以后好好学。谢谢!
#14
陌上过客2016-09-19 15:20
这代码好乱
1