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