第一次在这里发帖,我发现 Sol 20 计算机的旧 1977 BASIC 程序中存在一些错误。
第一个错误是“第 4240 行的 DM 错误”:
4220 PRINT " TYPE IN -STOP- TO QUIT ANYTIME"
4230 PRINT
4240 DIM A$(30),B$(30),C$(45),D$(30),E$(30),L$(10),Z$(12)
4250 LET A$="NO SUCH ELEVATION IN MY TAPES, UNDER 360, PLEASE."
4260 PRINT " THE TANK IS ";E;" FEET AWAY."
如果我从第 4240 行删除“B$(30)”,程序将继续运行,但会出现下面的“第 4590 行的 BS 错误”:
4560 IF I<=0 THEN 5250
4570 IF S=0 OR Z=3 THEN 4590
4580 LET S=-S
4590 LET D=(2*X**3*SIN(2*W)*COS(.5*W)/G*4)
4600 LET D=INT(D/15-(3*S-7))
4610 PRINT
4620 PRINT " ";D;" FEET"
如果我删除“X”后面的一个“*”,程序就可以运行,但范围太小了。熟悉 BASIC 的人可能都能发现错误或提出一些建议。
手册指出,这是试图多次确定数组的大小。请查找更早的语句
DIM
。要找出哪个数组触发了错误,请将这一行写入如下内容:
连续两个星号表示幂运算,因此简单地删除此表达式中的一个星号
(2*X**3*SIN(2*W)*COS(.5*W)/G*4)
并不等效。请(2*X*X*X*SIN(2*W)*COS(.5*W)/G*4)
改用。从您的评论中:
以及另一本手册的摘录:
很明显,在语句尝试声明字符串变量的最大大小之前,程序已经在使用默认维度为 10 的 B$ 字符串变量。这是不允许的。 要获得明确的答案,需要查看整个程序,但谨慎地说,只需将语句移动到程序的第一行(执行的行)即可解决此问题。
DIM B$(30)
DIM B$(30)
在手册中查找这些相关部分:
问题是,
B$
在第 4240 行之前已经被定义(明确或隐含地)。根据文档https://www.sol20.org/manuals/basic5.pdf,DM 错误意味着:
此外,默认数组大小为 10,这就是为什么你会得到
当您
B$
从DIM
声明中删除时。