loops - FOR/NEXT 带有多个下一个命令

标签 loops math basic

我必须在 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

最佳答案

这里有两个问题。

第一个是由第 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

关于loops - FOR/NEXT 带有多个下一个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58756249/

相关文章:

java - 将数字分成相等的部分,其中最后一部分等于或低于其余部分

java - 复合正弦近似

JavaScript 基础是 math.pow 函数中的十进制数

python - 异常后如何继续for循环?

swift - 使用存储在两个数组中的数字和权重计算加权平均值

basic - 大多数 8 位 BASIC 实现是什么类型的解释器?

mysql - Visual Basic 连接 MySQL 语法错误

basic - 如何在 commodore 64 basic 中分隔字符串?

Swift - 查找是所有数字 1...20 的倍数的数字

python - 如何在 Python 中迭代列表列表并添加其他列表中的值?