(重分酬谢)这个程序好象存在死循环,自己找不出问题,希望您能指教一下(高分酬谢)
Dim lh, lh1, Q1, Q3, ro, g300, P, xi, nai, Kai, Vai, Vai1, NRcai, fai, Vai2, Vai12, yxn2, yxn12, NRcai2, fai1, fai2, yxn1, yxn, A, B, C1, C2, NRcai1, NRcai12, g3 As SingleDim i, j, n, w As Integer
Dim x(8, 1), y(9) As Single
Private Sub Command1_Click()
x(0, 0) = Val(Text6.Text)
x(0, 1) = Val(Text7.Text)
x(1, 0) = Val(Text10.Text)
x(1, 1) = Val(Text11.Text)
x(2, 0) = Val(Text14.Text)
x(2, 1) = Val(Text15.Text)
x(3, 0) = Val(Text18.Text)
x(3, 1) = Val(Text19.Text)
x(4, 0) = Val(Text22.Text)
x(4, 1) = Val(Text23.Text)
x(5, 0) = Val(Text26.Text)
x(5, 1) = Val(Text27.Text)
x(6, 0) = Val(Text30.Text)
x(6, 1) = Val(Text31.Text)
x(7, 0) = Val(Text34.Text)
x(7, 1) = Val(Text35.Text)
x(8, 0) = Val(Text38.Text)
x(8, 1) = Val(Text39.Text)
y(0) = 0
y(1) = Val(Text8.Text)
y(2) = Val(Text12.Text)
y(3) = Val(Text16.Text)
y(4) = Val(Text20.Text)
y(5) = Val(Text24.Text)
y(6) = Val(Text28.Text)
y(7) = Val(Text32.Text)
y(8) = Val(Text36.Text)
y(9) = Val(Text40.Text)
'n = Val(Text47.Text) '分段数
'n = n - 1
Q1 = Val(Text41.Text)
Q2 = Val(Text42.Text)
P = Val(Text43.Text) ' 压差
Hjy = Val(Text49.Text)
j = 0
xi = 1
lh = 0
Do
i = 0
g300 = Val(Text44.Text)
g3 = Val(Text45.Text)
nai = 0.5 * Log((g300 / g3)) / Log(10) '钻柱外流性系数nai、稠度系数Kai
Kai = 0.51 * g300 / (511 ^ nai)
ro = Val(Text46.Text)
Vai = 4 * Q1 / (3.14 * (x(i, 0) ^ 2 - x(i, 1) ^ 2)) '管柱外液体流速
Vai1 = 4 * Q2 / (3.14 * (x(i, 0) ^ 2 - x(i, 1) ^ 2)) '井漏后管柱外液体流速
yxn = Kai * (1200 * Vai * (2 * nai + 1) / ((x(i, 0) - x(i, 1)) * 3 * nai)) ^ (nai - 1) '管柱外有效黏度yxn
yxn1 = Kai * (1200 * Vai1 * (2 * nai + 1) / ((x(i, 0) - x(i, 1)) * 3 * nai)) ^ (nai - 1) '井漏后管柱外有效黏度yxn
NRcai = 10 * ro * Vai * (x(i, 0) - x(i, 1)) / yxn '管柱外雷诺数
If NRcai < (3470 - (1370 * nai)) Then '判断流态
fai = 24 / NRcai
ElseIf NRcai > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai = A / NRcai ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai - C1) / 800)
End If
NRcai1 = 10 * ro * Vai1 * (x(i, 0) - x(i, 1)) / yxn1 '井漏后管柱外雷诺数
If NRcai1 < (3470 - (1370 * nai)) Then '判断流态
fai1 = 24 / NRcai1
ElseIf NRcai1 > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai1 = A / NRcai1 ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai1 = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai1 - C1) / 800)
End If
'求fa(i+1),fa(i+1)
Vai2 = 4 * Q1 / (3.14 * (x(i + 1, 0) ^ 2 - x(i + 1, 1) ^ 2)) '管柱外液体流速
Vai12 = 4 * Q2 / (3.14 * (x(i + 1, 0) ^ 2 - x(i + 1, 1) ^ 2))
yxn2 = Kai * (1200 * Vai2 * (2 * nai + 1) / ((x(i + 1, 0) - x(i + 1, 1)) * 3 * nai)) ^ (nai - 1) '管柱外有效黏度yxn
yxn12 = Kai * (1200 * Vai12 * (2 * nai + 1) / ((x(i + 1, 0) - x(i + 1, 1)) * 3 * nai)) ^ (nai - 1) '管柱外有效黏度yxn
NRcai2 = 10 * ro * Vai2 * (x(i + 1, 0) - x(i + 1, 1)) / yxn2 '管柱外雷诺数
If NRcai2 < (3470 - (1370 * nai)) Then '判断流态
fai2 = 24 / NRcai2
ElseIf NRcai > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai = A / NRcai2 ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai2 = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai2 - C1) / 800)
End If
NRcai12 = 10 * ro * Vai12 * (x(i + 1, 0) - x(i + 1, 1)) / yxn12 '管柱外雷诺数
If NRcai12 < (3470 - (1370 * nai)) Then '判断流态
fai12 = 24 / NRcai12
ElseIf NRcai12 > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai1 = A / NRcai12 ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai12 = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai12 - C1) / 800)
End If
A = 32.422 * ro / ((x(i + 1, 0) - x(i + 1, 1)) ^ 3 * (x(i + 1, 0) + x(i + 1, 1)) ^ 2)
For w = 0 To i
B = B + fai * y(w) / ((x(w, 0) - x(w, 1)) ^ 3 * (x(w, 0) + x(w, 1)) ^ 2)
B1 = B + fai1 * y(w) / ((x(wi, 0) - x(w, 1)) ^ 3 * (x(w, 0) + x(w, 1)) ^ 2)
Next w
B = B * 32.422 * ro * Q1 ^ 2
B1 = B1 * 32.422 * ro * Q2 ^ 2
For j = 0 To i
lh = lh + y(j)
Next j
If Q2 >= 0 Then
xi = (P - (B - B1)) / (A * (fai2 * Q1 ^ 2 - fai12 * Q2 ^ 2)) + lh
Else
xi = (P - 0.0098 * ro * Hjy - B) / (A * fai2 * Q1 ^ 2) + lh
End If
i = i + 1
lh = lh + y(i)
Loop Until xi <= lh
Text48.Text = xi
End Sub
--------------------编程问答-------------------- 是不是死循环,跟踪一下就知道了 --------------------编程问答-------------------- y数组是什么值时死循环 --------------------编程问答-------------------- 是不是死在DO LOOP里面了
有什么反映 --------------------编程问答-------------------- 你在DO里面 i=0 最后又i=i+1
这样i的值的没变的 因为每次循环过来i又重新赋值0了 不知道你是什么意思 你把i=0放到DO上面试试 --------------------编程问答-------------------- 楼上错了DO循环并没有错. --------------------编程问答--------------------
Option Explicit--------------------编程问答-------------------- 把 Do While True 上面那一行 Exit Sub 去掉.
Dim lh, lh1, Q1, Q2, ro, g300, P, xi, nai, Kai, Vai, Vai1, NRcai, fai, Vai2, Vai12, yxn2, yxn12, NRcai2, fai1, fai2, yxn1, yxn, A, B, C1, C2, NRcai1, NRcai12, g3 As Single
Dim Hjy As Single, fai12 As Single, wi As Single, B1 As Single '这是我增加的定义
Dim i, j, n, w As Integer
Dim x(8, 1), y(9) As Single
Private Sub Command1_Click()
x(0, 0) = Val(Text6.Text)
x(0, 1) = Val(Text7.Text)
x(1, 0) = Val(Text10.Text)
x(1, 1) = Val(Text11.Text)
x(2, 0) = Val(Text14.Text)
x(2, 1) = Val(Text15.Text)
x(3, 0) = Val(Text18.Text)
x(3, 1) = Val(Text19.Text)
x(4, 0) = Val(Text22.Text)
x(4, 1) = Val(Text23.Text)
x(5, 0) = Val(Text26.Text)
x(5, 1) = Val(Text27.Text)
x(6, 0) = Val(Text30.Text)
x(6, 1) = Val(Text31.Text)
x(7, 0) = Val(Text34.Text)
x(7, 1) = Val(Text35.Text)
x(8, 0) = Val(Text38.Text)
x(8, 1) = Val(Text39.Text)
y(0) = 0
y(1) = Val(Text8.Text)
y(2) = Val(Text12.Text)
y(3) = Val(Text16.Text)
y(4) = Val(Text20.Text)
y(5) = Val(Text24.Text)
y(6) = Val(Text28.Text)
y(7) = Val(Text32.Text)
y(8) = Val(Text36.Text)
y(9) = Val(Text40.Text)
'n = Val(Text47.Text) '分段数
'n = n - 1
Q1 = Val(Text41.Text)
Q2 = Val(Text42.Text) '这里是不是Q3,Q2没有定义
P = Val(Text43.Text) ' 压差
Hjy = Val(Text49.Text)
j = 0
xi = 1
lh = 0
Exit Sub
Do While True
If xi > lh Then Exit Do
i = 0
g300 = Val(Text44.Text)
g3 = Val(Text45.Text)
nai = 0.5 * Log((g300 / g3)) / Log(10) '钻柱外流性系数nai、稠度系数Kai
Kai = 0.51 * g300 / (511 ^ nai)
ro = Val(Text46.Text)
Vai = 4 * Q1 / (3.14 * (x(i, 0) ^ 2 - x(i, 1) ^ 2)) '管柱外液体流速
Vai1 = 4 * Q2 / (3.14 * (x(i, 0) ^ 2 - x(i, 1) ^ 2)) '井漏后管柱外液体流速
yxn = Kai * (1200 * Vai * (2 * nai + 1) / ((x(i, 0) - x(i, 1)) * 3 * nai)) ^ (nai - 1) '管柱外有效黏度yxn
yxn1 = Kai * (1200 * Vai1 * (2 * nai + 1) / ((x(i, 0) - x(i, 1)) * 3 * nai)) ^ (nai - 1) '井漏后管柱外有效黏度yxn
NRcai = 10 * ro * Vai * (x(i, 0) - x(i, 1)) / yxn '管柱外雷诺数
If NRcai < (3470 - (1370 * nai)) Then '判断流态
fai = 24 / NRcai
ElseIf NRcai > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai = A / NRcai ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai - C1) / 800)
End If
NRcai1 = 10 * ro * Vai1 * (x(i, 0) - x(i, 1)) / yxn1 '井漏后管柱外雷诺数
If NRcai1 < (3470 - (1370 * nai)) Then '判断流态
fai1 = 24 / NRcai1
ElseIf NRcai1 > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai1 = A / NRcai1 ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai1 = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai1 - C1) / 800)
End If
'求fa(i+1),fa(i+1)
Vai2 = 4 * Q1 / (3.14 * (x(i + 1, 0) ^ 2 - x(i + 1, 1) ^ 2)) '管柱外液体流速
Vai12 = 4 * Q2 / (3.14 * (x(i + 1, 0) ^ 2 - x(i + 1, 1) ^ 2))
yxn2 = Kai * (1200 * Vai2 * (2 * nai + 1) / ((x(i + 1, 0) - x(i + 1, 1)) * 3 * nai)) ^ (nai - 1) '管柱外有效黏度yxn
yxn12 = Kai * (1200 * Vai12 * (2 * nai + 1) / ((x(i + 1, 0) - x(i + 1, 1)) * 3 * nai)) ^ (nai - 1) '管柱外有效黏度yxn
NRcai2 = 10 * ro * Vai2 * (x(i + 1, 0) - x(i + 1, 1)) / yxn2 '管柱外雷诺数
If NRcai2 < (3470 - (1370 * nai)) Then '判断流态
fai2 = 24 / NRcai2
ElseIf NRcai > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai = A / NRcai2 ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai2 = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai2 - C1) / 800)
End If
NRcai12 = 10 * ro * Vai12 * (x(i + 1, 0) - x(i + 1, 1)) / yxn12 '管柱外雷诺数
If NRcai12 < (3470 - (1370 * nai)) Then '判断流态
fai12 = 24 / NRcai12
ElseIf NRcai12 > 4270 - 1370 * nai Then
A = (Log(nai) / Log(10) + 3.93) / 50
B = (1.75 - Log(nai) / Log(10)) / 7
fai1 = A / NRcai12 ^ B
Else
C1 = 3470 - 1370 * nai
C2 = 4270 - 1370 * nai
fai12 = 24 / C1 + (((A / C2 ^ B) - (24 / C1)) * (NRcai12 - C1) / 800)
End If
A = 32.422 * ro / ((x(i + 1, 0) - x(i + 1, 1)) ^ 3 * (x(i + 1, 0) + x(i + 1, 1)) ^ 2)
For w = 0 To i
B = B + fai * y(w) / ((x(w, 0) - x(w, 1)) ^ 3 * (x(w, 0) + x(w, 1)) ^ 2)
B1 = B + fai1 * y(w) / ((x(wi, 0) - x(w, 1)) ^ 3 * (x(w, 0) + x(w, 1)) ^ 2)
Next w
B = B * 32.422 * ro * Q1 ^ 2
B1 = B1 * 32.422 * ro * Q2 ^ 2
For j = 0 To i
lh = lh + y(j)
Next j
If Q2 >= 0 Then
xi = (P - (B - B1)) / (A * (fai2 * Q1 ^ 2 - fai12 * Q2 ^ 2)) + lh
Else
xi = (P - 0.0098 * ro * Hjy - B) / (A * fai2 * Q1 ^ 2) + lh
End If
i = i + 1
lh = lh + y(i)
Loop 'Until xi <= lh
Text48.Text = xi
End Sub
--------------------编程问答-------------------- 路过..........
Up....
--------------------编程问答-------------------- 此句不能正常赋值(B,B1一直为零)
For w = 0 To i
B = B + fai * y(w) / ((x(w, 0) - x(w, 1)) ^ 3 * (x(w, 0) + x(w, 1)) ^ 2)
B1 = B + fai1 * y(w) / ((x(wi, 0) - x(w, 1)) ^ 3 * (x(w, 0) + x(w, 1)) ^ 2)
Next w
--------------------编程问答-------------------- 你把他多分成几行,太复杂了,我看着都有点头疼,而且可以加快速度。
--------------------编程问答-------------------- 看着头晕!
补充:VB , 基础类