之前在 SB2000 上算过圆周率 [猛击此处 和 此处],速度特别慢.当我拿到步步高软驱1号 [看这里], 我就准备把 SB2000 放 ebay 上拍了 :). 步步高上也有个BASIC,想比较一下之前算圆周率的程序在步步高上运行如何,就请继续往下看.
原来的BASIC程序如果不修改是无法直接运行在步步高上的.尽管如此,BASIC程序还算是当时所有8位兼容机带键盘的中可移植性较强的语言(当然还有LOGO,不过BASIC能做的事情会比较多)
顺便说一下,之前我装了仿真软驱,把一个U盘格成100张1.44M 的软盘,往”软盘”上写数据得借助PC上的软件,这样一来,在步步高和PC上交换数据就特别麻烦.后来,我翻出了一个老的 128M 的U盘,把它格成1张1.44M 的软盘(其它空间就浪费了),但是这样一来,这个U盘可以很容易(不用借助软件)就可以在电脑上识别,也可以在仿真软驱上识别(这时候指示灯必须在000 号盘), 交换数据因些变得很简单.
总结了几个SB2000上的F-BASIC和步步高上的BASIC的区别.我个人还是比较喜欢步步高的,感觉步步高当年开发者程序设计水平比较高,而且整体来说, 步步高软驱1号或者98型学生电脑都把这个”单片机”做到极致了.
1. 步步高上的 ‘THEN‘ 不能省略,但在SB2000上的F-BASIC却可以省, 因此在步步高上, 必须要写全了.
if a=1 then 10 else 20
2. 在步步高上 ‘DIM‘ 数组(括号定义)内必须是常量,不能是变量,在SB2000的F-BASIC上可以是变量,有点像 REDIM 的感觉.
3. 在步步高上,数组下标从 1 开始, 而SB2000的是从 0 开始.
4. 步步高没有 MOD 操作, 所以要计算取余 x % y 需要这么写:
mod = x - int(x/y) * y
5. 在步步高上你可以用 def fn 定义一个简短的一个参数的函数.
def fn sqr(x)=x*x
print fn sqr(3)
6. 在步步高上你可以用 clear 清理变量空间. 有更多的函数如 time 和 date 这样你就可以测量程序运行的时间了. call 函数可以用来运行指定内存的程序或者外部程序.
7. 在步步高BASIC上有画图相关的语句 circle, dot, color 和 line.
8. 在步步高BASIC上你可以用 peek 和 poke 来对内存进行操作,比如 dump bios
经过修改后, 就可以在步步高上计算圆周率了.
最后几个数字不对的, 这是和算法相关, 因为最后几位还没有收敛,要提高精度,请修改第10行,比如改成 N=40
完整的BASIC代码如下:
1 REM *********************************
2 REM *RUN ON BUBUGAO BBG *
3 REM *F-BASIC PROGRAM BY HELLOACM.COM*
4 REM *BY DR ZHIHUA LAI *
5 REM *********************************
6 CLEAR
7 PRINT "PI COMPUTATION":PRINT" --- MADE BY DR ZHIHUA LAI"
9 PRINT "START TIME:":PRINT TIME$(":")
10 N=15
11 REM CHANGE ABOVE N FOR PRECISION
15 PRINT "VISIT HTTP://HELLOACM.COM"
16 REM BBG BASIC ONLY SUPPORTS DIM WITH CONTANTS
17 REM MAXIMUM UPBOUND CHANGE IF NECESSARY
18 PRINT "COMPUTE ";N;" DECIMAL PLACES.."
19 PRINT "PLEASE WAIT.. THANK YOU!"
20 REM ***** VARIABLE DECLARATION *****
25 DIM X(100)
30 DIM Z(100)
31 REM FOR I=1 TO N
32 REM X(I)=0
33 REM Z(I)=0
34 REM NEXT I
40 X(2)=2
50 Z(2)=2
60 A=1
70 B=3
75 REM ***** START COMPUTATION *****
80 D=0
90 J=N
95 IF J=0 THEN GOTO 140
100 C=Z(J)*A+D
110 Z(J)=C-INT(C/10)*10
120 D=INT(C/10)
130 J=J-1
135 GOTO 95
140 D=0
145 J=1
150 IF J>N THEN GOTO 200
160 C=Z(J)+D*10
170 Z(J)=INT(C/B)
180 D=C-Z(J)*B
190 J=J+1
195 GOTO 150
200 R=0
210 J=N
215 IF J=1 THEN GOTO 280
220 C=X(J)+Z(J)
230 X(J)=C-INT(C/10)*10
240 X(J-1)=X(J-1)+INT(C/10)
250 R=R+Z(J)
260 J=J-1
270 GOTO 215
275 REM ***** CHECK SHOULD WE END *****
280 IF R=0 THEN GOTO 300
290 A=A+1
292 B=B+2
295 GOTO 80
296 REM *****PRINT THE RESULT*****
300 FOR T=1 TO N
301 PRINT STR$(X(T));
302 NEXT T
303 PRINT ""
330 PRINT "END TIME:":PRINT TIME$(":")
335 END
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK