首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有多个next命令的FOR/NEXT

具有多个next命令的FOR/NEXT
EN

Stack Overflow用户
提问于 2019-11-08 04:11:12
回答 4查看 74关注 0票数 2

我必须用BASIC编写一个圆周率的计算程序。为此,我使用BASIC的FOR ... TO ... STEP构造。

另外,我使用了两个NEXT命令,最后一个命令失败了。看起来只有当程序员达到循环的极限时,它才会失败。

我的代码如下所示:

代码语言:javascript
复制
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

预期的结果是如下所示的列表:

代码语言:javascript
复制
3.2981943981943984
3.2994764494764497
3.2986049897814604
3.2992241848279003
3.2987685001616893

and so on...

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

代码语言:javascript
复制
next without for in line 2110

或者,在另一个环境中

代码语言:javascript
复制
E6 at 2110 FOR/NEXT error

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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发现的无穷级数计算π,如下所示:

代码语言:javascript
复制
           4       4       4
pi = 3 + ----- - ----- + ----- - ...
         2.3.4   4.5.6   6.7.8

但是在您的程序中,您错误地将分母计算为1.3.4、3.5.6、5.7.8,依此类推。以下是建议的重写,应该会给你带来更好的结果:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2019-11-08 06:32:50

可以,您只能有一条NEXT语句。相反,对于这两种类型的计算,可以使用IF .. THEN .. ELSE .. END IF进行分支。

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2019-11-08 10:39:39

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58756249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档