BASIC:修订间差异
Malacology(留言 | 贡献) 小 →矩阵 |
Malacology(留言 | 贡献) add: compiler |
||
第8行: | 第8行: | ||
Dartmouth: [https://github.com/nigelperks/LegacyBasic Legacy Basic] | Dartmouth: [https://github.com/nigelperks/LegacyBasic Legacy Basic] | ||
= 编译器 = | |||
Dartmouth: [https://github.com/cpp-tutor/dbasic dbasic] | |||
使用 | |||
<pre>dbasic 1 < hello.bas > hello.ll | |||
clang -O3 -o hello hello.ll runtime/basic_lib.c -lm | |||
./hello</pre> | |||
= 基础 = | = 基础 = |
2023年10月20日 (五) 09:39的版本
BASIC 有三代
- Dartmouth
- Structed
- Object-oriented
解释器
Dartmouth: Legacy Basic
编译器
Dartmouth: dbasic
使用
dbasic 1 < hello.bas > hello.ll clang -O3 -o hello hello.ll runtime/basic_lib.c -lm ./hello
基础
开头一般写行号×10,因为可以补救
REM
注释PRINT
输出:""
里包含字符串,
或者;
负责分割数值和字符串END
结束
解释器
前面不加行号
RUN
解释器运行STOP
解释器停止运行LIST
显示代码,后面可以跟行号
赋值
单个
LET
赋值 声明变量
多个
READ
批量未赋值声明DATA
批量赋值,多出来的不处理,这里的 8 9 10
410 READ A1, A2, A3 420 READ B1, B2, B3, B4 430 DATA 1, 2, 3, 4, 5 440 DATA 6, 7, 8, 9, 10 450 PRINT A1, A2, A3, 460 PRINT B1, B2, B3, B4
流程控制
IF
IF
行号
310 IF S < 0 THEN 350
GOTO
GOTO
行号
FOR & NEXT
FOR
循环范围,步数NEXT
结束循环
250 LET S = 0 260 FOR N = 1 TO 3 STEP 2 270 LET S = S + N 280 NEXT N
GOSUB & RETURN
GOSUB
去RETURN
回到 GOSUB 位置
10 LET X = 2 20 IF X<0 THEN 60 30 X = X - 1 40 PRINT "X (BEFORE) IS ", X 50 GOSUB 20 60 PRINT "X (AFTER) IS ", X 70 IF X<0 THEN 90 80 RETURN 90 PRINT "END" 100 END
计算
函数
SIN()
P/6=30度 P/3=60度 P/2=90度COS()
TAN()
ATN()
tan 的倒数EXP()
e^()
LOG()
SQR()
平方根ABS()
绝对值RND
随机数 ## 表达式>
<
=
<>
不等于>=
<=
矩阵
DIM
数组/矩阵
10 DIM A(10) 20 FOR I = 0 TO 10 30 A(I) = I * 2 40 NEXT I 50 FOR I = 0 TO 10 60 PRINT "A("; I; ") = "; A(I) 70 NEXT I 80 END
示例
10 REM INTRO TO BASIC PROGRAMMING: REM & PRINT 20 PRINT "HELLO, THIS IS BASED ON FIRST BASIC INSTUCTION MANUAL (1964)" 30 REM INTERGRES AND FLOAT: LET & EXPO & LOG & SQR & ABS 40 LET X=2 50 PRINT "X IS ", X 60 LET Y=(7+8)/3 70 PRINT "Y=(7+8)/3 IS ", Y 80 LET Z=2/3 90 PRINT "Z=2/3 IS ", Z 100 LET A = Y ^ X * 5 110 PRINT "A=Y^X IS ", A 120 LET B = 2* ( (P/6) + COS(P/3) ) 130 PRINT "2(SIN30+COS60) IS ", B 140 LET C = EXP(0) 150 PRINT "EXPO(0) IS ", C, " WHICH MEANS E^0" 160 LET D = LOG(1) 170 PRINT "LOG(0) IS ", D 180 LET E = SQR(4) 190 PRINT "SQR(4) IS ", E 200 LET F = ABS(-12) 210 PRINT "ABS(-12) IS ", F 220 PRINT "THE CALCULATION RESULTS AVOBE ARE ", A, B, C, D, E, F 230 REM FOR: FOR & NEXT 240 PRINT "FOR IS STARTING NOW" 250 LET S = 0 260 FOR N = 1 TO 3 STEP 2 270 LET S = S + N 280 NEXT N 290 PRINT S 300 REM GOTO, IF THEN. = > < (<> not equal) ALL ARE ALLOWED: GOO & IF & THEN 310 IF S < 0 THEN 350 320 LET S = S - 1 330 PRINT "NOW S IS ", S 340 GOTO 310 350 PRINT "IF IS END. S is "; S 360 REM DEF: DEF 370 DEF FNC(G) = G^3 + 2.7*G 380 LET H = FNC(Y) 390 PRINT H 400 REM READ, DATA. LET BY BATCH: READ & DATA 410 READ A1, A2, A3 420 READ B1, B2, B3, B4 430 DATA 1, 2, 3, 4, 5 440 DATA 6, 7, 8, 9, 10 450 PRINT A1, A2, A3, 460 PRINT B1, B2, B3, B4 470 END