小赖子的英国生活和资讯

在步步高软驱1号或者98型学生电脑上算圆周率

阅读 桌面完整版

英文同步

之前在 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却可以省, 因此在步步高上, 必须要写全了.

1
if a=1 then 10 else 20
if a=1 then 10 else 20

2. 在步步高上 ‘DIM‘ 数组(括号定义)内必须是常量,不能是变量,在SB2000的F-BASIC上可以是变量,有点像 REDIM 的感觉.

3. 在步步高上,数组下标从 1 开始, 而SB2000的是从 0 开始.

4. 步步高没有 MOD 操作, 所以要计算取余 x % y 需要这么写:

1
mod = x - int(x/y) * y
mod = x - int(x/y) * y

5. 在步步高上你可以用 def fn 定义一个简短的一个参数的函数.

1
2
def fn sqr(x)=x*x
print fn sqr(3)
def fn sqr(x)=x*x
print fn sqr(3)

6. 在步步高上你可以用 clear 清理变量空间. 有更多的函数如 timedate 这样你就可以测量程序运行的时间了. call 函数可以用来运行指定内存的程序或者外部程序.

7. 在步步高BASIC上有画图相关的语句 circle, dot, colorline.

8. 在步步高BASIC上你可以用 peekpoke 来对内存进行操作,比如 dump bios

经过修改后, 就可以在步步高上计算圆周率了.

最后几个数字不对的, 这是和算法相关, 因为最后几位还没有收敛,要提高精度,请修改第10行,比如改成 N=40

完整的BASIC代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
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

强烈推荐

微信公众号: 小赖子的英国生活和资讯 JustYYUK

阅读 桌面完整版
Exit mobile version