FOR / NEXT具有多个下一个命令

问题描述 投票:2回答:3

我必须用BASIC编写pi的计算程序。为此,我使用BASIC的FOR ... TO ... STEP构造。

而且,我正在使用2个NEXT命令,最后一个失败。看起来只有在程序达到循环极限时它才会失败。

我的代码如下:

2040 LET M = 0
2050 LET P = 3
2070 FOR i = 1 TO 50 STEP 2
2075 IF M = 1 THEN 2100
2080 P = P + 4/(I*(I+2)*(I+3))
2085 M = 1
2089 PRINT P
2090 NEXT i
2100 P = P - 4/(I*(I+2)*(I+3))
2105 M = 0
2109 PRINT P
2110 NEXT i

例外结果是这样的列表:

3.2981943981943984
3.2994764494764497
3.2986049897814604
3.2992241848279003
3.2987685001616893

and so on...

我得到的错误(仅当i达到50时:

next without for in line 2110

或者,在其他环境中

E6 at 2110 FOR/NEXT error

我在网络上找不到非常有用的文档,只有基本的FOR ... TO ... STEP ... NEXT

loops math basic
3个回答
2
投票

是,您只能有一个NEXT语句。而是使用IF .. THEN .. ELSE .. END IF分支出两种计算类型。

2040 LET M = 0
2050 LET P = 3
2070 FOR i = 1 TO 50 STEP 2
2075 IF M <> 1 THEN 
2080 P = P + 4/(I*(I+2)*(I+3))
2085 M = 1
2089 PRINT P
2090 ELSE
2100 P = P - 4/(I*(I+2)*(I+3))
2105 M = 0
2107 END IF
2109 PRINT P
2110 NEXT i

2
投票

这里有两个问题。

第一个是由第2075行的(隐含的)GOTO语句引起的。(用Edsger Dijkstra的话,GOTO语句为considered harmful。)在FOR循环中,交替执行第2080-2089行和第2100-2109行在每个奇数甚至偶数迭代中。由于循环运行的次数是奇数次(准确地说是25次),所以它将在到达2090行的NEXT I语句时结束。此后,程序将进入2100-2109行,然后在第2行失败2110当没有FOR循环处于活动状态时遇到NEXT语句。

[一种更好的方法是使用IF ... THEN ... ELSE结构来控制FOR循环内的流,或者简单地将M的值合并到计算中,例如,通过将M初始化为4 2040,将2080行中的M替换为4,并用M = -M替换2085行。这种方法还具有以下优点:pi的计算仅发生in one line,而不是两个。

另一个问题是您的程序产生了错误的答案!似乎您正在使用Nilakantha Somayaji发现的无穷级数计算pi,如下所示:

           4       4       4
pi = 3 + ----- - ----- + ----- - ...
         2.3.4   4.5.6   6.7.8

但是在您的程序中,分母的计算不正确是1.3.4、3.5.6、5.7.8,依此类推。这是建议的重写,应该会给您带来更好的结果:

1000 LET M = 4
1010 LET P = 3
1020 FOR I = 1 TO 50 STEP 2
1030 P = P + M / ((I+1)*(I+2)*(I+3))
1040 M = -M
1050 PRINT P
1060 NEXT I

0
投票

我一直使用的生成PI的函数:

REM 4 * (1/1-1/3+1/5-1/7...)
REM 3.1415926
DEFDBL A-Z
L = 1
DO
    X = X + 1 / L - 1 / (L + 2)
    L = L + 4
    P = 4 * X
    PRINT P
LOOP
END
© www.soinside.com 2019 - 2024. All rights reserved.