求指导释段QB代码,怎么样改成c#

.Net技术 码拜 8年前 (2016-03-01) 911次浏览
下面这段是Qbasic的代码,goto用的本人头晕,实在看不清楚了,求个懂的人帮忙翻一下或改成c#代码,感谢!

3000 I0 = 0
3005 IF Z < X(I0 + 1) THEN J0 = 0: GOTO 3018
3010 IF Z > X(17) THEN I0 = 16: J0 = 0: GOTO 3018
3015 I0 = I0 + 1: GOTO 3005
3016 J0 = J0 + 1
3018 IF J0 = 21 THEN J0 = J0 + 1: GOTO 3030
3020 IF HH > Y(J0) THEN 3016
3025 IF HH > Y(J0 - 1) THEN J0 = J0 + 1
3030 J0 = J0 - 2
3035 FOR K1 = 0 TO 2
3040 L1 = J0 + K1 - 0: I2 = I0 + 1: F0(K1) = 0
3045 FOR I1 = I0 TO I2
3050 P0 = 1
3055 FOR J1 = I0 TO I2
3060 IF I1 - J1 = 0 THEN 3070
3065 P0 = P0 * (Z - X(J1)) / (X(I1) - X(J1))
3070 NEXT J1
3075 F0(K1) = F0(K1) + P0 * F(I1, L1)
3080 NEXT I1: NEXT K1
3085 C(I) = 0: J2 = J0 + 1
3090 FOR I1 = J0 TO J2
3095 L1 = I1 - J0 + 0: P0 = 1
3100 FOR J1 = J0 TO J2
3105 IF I1 - J1 = 0 THEN 3115
3110 P0 = P0 * (HH - Y(J1)) / (Y(I1) - Y(J1))
3115 NEXT J1
3120 C(I) = C(I) + P0 * F0(L1)
3125 IF C(I) > 1 THEN C(I) = 1: GOTO 3135
3130 IF C(I) < 0 THEN C(I) = 0
3135 NEXT I1: RETURN
解决方案

40

N 年了,居然还能记得,真实佩服本人,哈哈哈哈~ 就是变量一头雾水
GOTO  无条件转移,代码中的 GOTO  是为了 break 和 continue

void Translation(int[] X, int[] Y)
{
    int I0 = 0, J0 = 0, Z = 0, HH = 0;
    while (true)
    {
        if (Z < X[I0 + 1]) // 3005
        {
            J0 = 0;
            break; // goto 3018
        }
        if (Z > X[17]) // 3010
        {
            I0 = 16;
            J0 = 0;
            break; // goto 3018
        }
        I0++; // 3015
    }
    while (true)
    {
        if (J0 == 21) // 3018
        {
            J0++;
            break; // goto 3030
        }
        if (HH > Y[J0]) // 3020
        {
            J0++; // 3016
            continue; // goto 3016
        }
        if (HH > Y[J0 - 1]) // 3025
            J0++;
    }
    J0 -= 2; // 3030
    int L1 = 0, I2 = 0, P0 = 0;
    int[] F0 = new int[3];
    for (int K1 = 0; K1 < 3; K1++) // 3035
    {
        // 3040
        L1 = J0 + K1 - 0; // ??? - 0
        I2 = I0 + 1;
        F0[K1] = 0;
        int[,] F = new int[100, 100]; // ???
        for (int I1 = I0; I1 <= I2; I1++) // 3045
        {
            P0 = 1; // 3050
            for (int J1 = I0; J1 <= I2; J1++) // 3055
            {
                if (I1 - J1 == 0) // 3060
                    continue; // goto 3070
                P0 = P0 * (Z - X[J1]) / (X[I1] - X[J1]); // 3065
            } // 3070
            F0[K1] = F0[K1] + P0 * F[I1, L1]; // 3075
        } // 3080
    } // 3080
    int I = 0; // ?
    int[] C = new int[100]; //?
    // 3085
    C[I] = 0;
    int J2 = J0 + 1;
    for (int I1 = J0; I1 <= J2; I1++) // 3090
    {
        // 3085
        L1 = L1 - J0 + 0; // ??? + 0
        P0 = 1;
        for (int J1 = J0; J1 < J2; J1++) // 3100
        {
            if (I1 - J1 == 0) // 3105
                continue; // goto 3115
            P0 = P0 * (HH - Y[J1]) / (Y[I1] - Y[I2]); // 3110
        } // 3115
        C[I] = C[I] + P0 * F0[L1]; // 3120
        if (C[I] > 1) // 3125
        {
            C[I] = 1;
            continue; // goto 3135
        }
        if (C[I] < 0) C[I] = 0; // 3130
    } // 3135
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明求指导释段QB代码,怎么样改成c#
喜欢 (0)
[1034331897@qq.com]
分享 (0)