我必须用BASIC编写一个圆周率的计算程序。为此,我使用BASIC的FOR ... TO ... STEP构造。
另外,我使用了两个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。
发布于 2019-11-08 06:42:55
这里有两个问题。
第一个是由2075行的(隐含的) GOTO语句引起的。(用Edsger Dijkstra的话说,GOTO语句是considered harmful。)在FOR循环中,2080-2089行和2100-2109行在每次奇偶迭代时交替执行。由于循环运行的次数是奇数(准确地说是25次),因此它将在到达2090行的下一条i语句时结束。在此之后,程序将一直运行到第2100-2109行,然后在没有FOR循环处于活动状态时遇到NEXT语句时,在第2110行失败。
更好的方法是使用IF...THEN...ELSE结构来控制FOR循环内的流,或者简单地将M的值合并到计算中,例如,通过在行2040将M初始化为4,在2080行用M替换4,并用M= -M替换2085行。这种方法还有一个优点,即π的计算只发生in one line而不是两次。
另一个问题是你的程序产生了错误的答案!看起来您正在使用Nilakantha Somayaji发现的无穷级数计算π,如下所示:
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发布于 2019-11-08 06:32:50
可以,您只能有一条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发布于 2019-11-08 10:39:39
我一直使用的一个生成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
ENDhttps://stackoverflow.com/questions/58756249
复制相似问题