当前位置:编程学习 > VB >>

(重分酬谢)这个程序好象存在死循环,自己找不出问题,希望您能指教一下(高分酬谢)

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 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)
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
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
--------------------编程问答-------------------- 把 Do While True 上面那一行 Exit 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 ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,