下面这段是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
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 }