回 帖 发 新 帖 刷新版面

主题:[讨论][求助]高手帮我看一下我的代码是哪里溢出?怎么解决

高手帮我看一下我的代码是哪里益处?怎么解决
Private Sub Form_Load()
Dim EU(20) As Single, EL(20) As Single, ED(20) As Single, E(20) As Single
Dim WU(20) As Single, WL(20) As Single, WD(20) As Single, W(20) As Single
Dim Q(20) As Single, R(20) As Single, QG(20) As Single, X(20) As Single, SS(20) As Single, G(20) As Integer, AU(20) As Single
Dim RG(20) As Single, PE(20) As Single, RS(20) As Single, A(20) As Single
Dim P(20) As Single, EM(20) As Single, FR(20) As Single, S(20) As Single, RI(20) As Single, ID(20) As Single, GD(20) As Single
Dim pea(20) As String, ra(20) As String, rga(20) As String, rsa(20) As String, ria(20) As String, risa(20) As String, qga(20) As String
Dim i As Integer, Kc As Single, MM As Single, MS As Single
Const C = 0.15
Const B = 0.4
Const WM = 120
Const UM = 20
Const LM = 80
Const IM = 0.01
Const CG = 0.985
Const U = 18.1
Const K = 0.5
Const EX = 1.5
Const SM = 20
Const KI = 0.35
Const KG = 0.35
MM = (1 + B) * WM / (1 - IM)
MS = (1 + EX) * SM

For i = 1 To 20 Step 1
   W(0) = 37.78
   QG(0) = 6.63
   FR(0) = 0.05
   S(0) = 0
   
  ' P(1) = 63.3: EM(1) = 4.9
 '  P(2) = 3.7: EM(2) = 4.6
  ' P(3) = 0: EM(3) = 6.1
  ' P(4) = 0: EM(4) = 7#
  ' P(5) = 0: EM(5) = 6.4
    R(1) = 12.46: PE(1) = 60.85
    R(2) = 0.44: PE(2) = 1.4
  
  ' PE(i) = P(i) - K * EM(i)
  
       ' A(i) = MM * (1 - (1 - W(i - 1) / WM) ^ (1 / (1 + B)))
       '  If A(i) + PE(i) < MM Then
          '  R(i) = PE(i) - WM + W(i - 1) + WM * (1 - (PE(i) + A(i)) / MM) ^ (1 + B)
          
                  X(i) = FR(i - 1)
                  FR(i) = R(i) / PE(i)
                  S(i) = X(i) * S(i - 1) / FR(i)
                  SS(i) = S(i)
                  Q(i) = R(i) / FR(i)
                  G(i) = Int(Q(i) / 5) + 1
                  Q(i) = Q(i) / G(i)
                  ID(i) = (1 - (1 - (KG + KI)) ^ (1 / G(i))) / (1 + KG / KI)
                  GD(i) = ID(i) * KG / KI
            RS(i) = 0
            RG(i) = 0
            RI(i) = 0
            For J = 1 To G(i)
                AU(i) = MS * (1 - (1 - S(i) / SM) ^ (1 / (1 + EX)))
                   If AU(i) + Q(i) < MS Then
                    RS(i) = (Q(i) - SM + S(i) + SM * (1 - (Q(i) + AU(i)) / MS) ^ (1 + EX)) * FR(i) + RS(i)
                    S(i) = J * Q(i) - RS(i) / FR(i) + S(i)
                    RG(i) = S(i) * GD(i) * FR(i) + RG(i)
                    RI(i) = S(i) * ID(i) * FR(i) + RI(i)
                    S(i) = J * Q(i) + SS(i) - (RS(i) + RI(i) + RG(i)) / FR(i)
                   Else
                    RS(i) = (Q(i) + S(i) - SM) * FR(i) + RS(i)
                    S(i) = J * Q(i) - RS(i) / FR(i) + S(i)
                    RG(i) = S(i) * GD(i) * FR(i) + RG(i)
                    RI(i) = S(i) * ID(i) * FR(i) + RI(i)
                    S(i) = J * Q(i) + SS(i) - (RS(i) + RI(i) + RG(i)) / FR(i)
                   End If
             Next J
              EU(i) = K * EM(i): ED(i) = 0: EL(i) = 0
                If WU(i - 1) + PE(i) - R(i) < UM Then
                       WU(i) = WU(i - 1) + PE(i) - R(i)
                      E(i) = EU(i) + EL(i) + ED(i): W(i) = WU(i) + W(i - 1) - WU(i - 1) '''''you
                       QG(i) = QG(i - 1) * CG + RG(i) * (1 - CG) * U
                Else
                  If WU(i - 1) + WL(i - 1) + PE(i) - R(i) - UM > LM Then
                             WU(i) = UM: WL(i) = LM
                             WD(i) = W(i - 1) + PE(i) - R(i) - WU(i) - WL(i)
                             E(i) = EU(i) + EL(i) + ED(i): W(i) = WU(i) + WL(i) + WD(i)
                             QG(i) = QG(i - 1) * CG + RG(i) * (1 - CG) * U
                  Else
                         WL(i) = WU(i - 1) + WL(i - 1) + PE(i) - R(i) - UM
                         WU(i) = UM
                         E(i) = EU(i) + EL(i) + ED(i): W(i) = WU(i) + WL(i) + WD(i - 1)
                         QG(i) = QG(i - 1) * CG + RG(i) * (1 - CG) * U
                  End If
                End If
          ' Else
          ' R(i) = PE(i) + W(i) - WM
       ' End If
   'End If
Next i
ra(i) = (Int(R(i) * 100 + 0.5)) / 100
pea(i) = (Int(PE(i) * 100 + 0.5)) / 100
rsa(i) = (Int(RS(i) * 100 + 0.5)) / 100
rga(i) = (Int(RG(i) * 100 + 0.5)) / 100
ria(i) = (Int(RI(i) * 100 + 0.5)) / 100
risa(i) = (Int((RS(i) + RI(i)) * 100 + 0.5)) / 100
qga(i) = (Int(QG(i) * 100 + 0.5)) / 100

Open "C:\Documents and Settings\yh\桌面\新安江\三水源.txt." For Output As #1
Print #1, "新安江模型(M=1)产流计算实例"
Print #1, "--------------------------------------------------------------------------------------------------------------------------"
Print #1, "R", "PE", "RS", "RG", " RSS", " RS,RSS", "QG"
Print #1, " ", " ", " ", " ", " ", " ", QG(0)
For i = 1 To 12
Print #1, ra(i), pea(i), rsa(i), rga(i), ria(i), risa(i), qga(i)
Next i
Print #1, "   |                       *"
Print #1, "   |                       * *"
Print #1, "200|                      *  *"
Print #1, "   |                      *   *"
Print #1, "   |                      *   *"
Print #1, "   |                     *     *"
Print #1, "   |                     *      *"
Print #1, "   |                     *      *"
Print #1, "   |                    * QRS    *"
Print #1, "   |                   *         *"
Print #1, "   |                   *          *"
Print #1, "   |                  *           *"
Print #1, "100|                 *             *"
Print #1, "   |                 *       #      *"
Print #1, "   |                *     #  #       *"
Print #1, "   |               *     #     #      *"
Print #1, "   |              *     #          #   *"
Print #1, "   |             *   #                #  *"
Print #1, "   |           *   #                       # *"
Print #1, "   |         *  #        QRSS                     #*"
Print #1, "   |      * #                                              #*"
Print #1, "   |   *#                                                           #*"
Print #1, "   |*_____________________________________________________________________#*"
Print #1, "   |____________________________________________QRG____________________________"
Print #1, "             2,        14,         2,         11,       2,        1,         1"
Close #1

End Sub

回复列表 (共2个回复)

沙发

1、运行时候溢出,会自动显示位置,并用鼠标可以查看。
2、你目前的错误在:
 FR(i) = R(i) / PE(i)
行,此时i=3,pe(i)即pe(3)=0,引起计算结果溢出!

板凳

可以尝试定义动态数组

我来回复

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