Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,76 @@
|
|||
10 REM Parsing/RPN calculator algorithm
|
||||
20 MAX.INDEX% = 63
|
||||
30 REM Stack
|
||||
40 REM TOP.INDEX% - top index of the stack
|
||||
50 DIM ELEMS(MAX.INDEX%)
|
||||
60 EXPR$ = "3 4 2 * 1 5 - 2 3 ^ ^ / +": GOSUB 200
|
||||
70 END
|
||||
190 REM ** Evaluate the expression in RPN
|
||||
200 GOSUB 1000
|
||||
210 PRINT "Input", "Operation", "Stack after"
|
||||
220 REM SP% - start position of token, DP% - position of delimiter
|
||||
230 DP% = 0
|
||||
240 REM Loop: do ... until DP% = 0
|
||||
250 SP% = DP% + 1
|
||||
260 DP% = INSTR(DP% + 1, EXPR$, " ")
|
||||
270 IF DP% = 0 THEN TOKEN$ = MID$(EXPR$, SP%, LEN(EXPR$) - SP% + 1) ELSE TE% = DP% - 1: TOKEN$ = MID$(EXPR$, SP%, DP% - SP%)
|
||||
280 PRINT TOKEN$,
|
||||
290 IF TOKEN$ <> "*" THEN 350
|
||||
300 PRINT "Operate",
|
||||
310 GOSUB 1060: SECOND = POP
|
||||
320 GOSUB 1060: FIRST = POP
|
||||
330 X = FIRST * SECOND: GOSUB 1160
|
||||
340 GOTO 610
|
||||
350 IF TOKEN$ <> "/" THEN 410
|
||||
360 PRINT "Operate",
|
||||
370 GOSUB 1060: SECOND = POP
|
||||
380 GOSUB 1060: FIRST = POP
|
||||
390 X = FIRST / SECOND: GOSUB 1160
|
||||
400 GOTO 610
|
||||
410 IF TOKEN$ <> "-" THEN 470
|
||||
420 PRINT "Operate",
|
||||
430 GOSUB 1060: SECOND = POP
|
||||
440 GOSUB 1060: FIRST = POP
|
||||
450 X = FIRST - SECOND: GOSUB 1160
|
||||
460 GOTO 610
|
||||
470 IF TOKEN$ <> "+" THEN 530
|
||||
480 PRINT "Operate",
|
||||
490 GOSUB 1060: SECOND = POP
|
||||
500 GOSUB 1060: FIRST = POP
|
||||
510 X = FIRST + SECOND: GOSUB 1160
|
||||
520 GOTO 610
|
||||
530 IF TOKEN$ <> "^" THEN 590
|
||||
540 PRINT "Operate",
|
||||
550 GOSUB 1060: SECOND = POP
|
||||
560 GOSUB 1060: FIRST = POP
|
||||
570 X = FIRST ^ SECOND: GOSUB 1160
|
||||
580 GOTO 610
|
||||
590 PRINT "Push",
|
||||
600 X = VAL(TOKEN$): GOSUB 1160
|
||||
610 GOSUB 1100
|
||||
620 IF DP% <> 0 THEN 250
|
||||
630 GOSUB 1060:
|
||||
640 PRINT "Final answer: "; POP
|
||||
650 GOSUB 1030
|
||||
660 IF NOT EMPTY% THEN PRINT "Error, too many operands: "; : GOSUB 1100: STOP
|
||||
670 RETURN
|
||||
980 REM ** Operations on the stack
|
||||
990 REM ** Make the stack empty
|
||||
1000 TOP.INDEX% = MAX.INDEX% + 1
|
||||
1010 RETURN
|
||||
1020 REM ** Is the stack empty?
|
||||
1030 EMPTY% = TOP.INDEX% > MAX.INDEX%
|
||||
1040 RETURN
|
||||
1050 REM ** Pop from the stack
|
||||
1060 GOSUB 1030
|
||||
1070 IF NOT EMPTY% THEN POP = ELEMS(TOP.INDEX%): TOP.INDEX% = TOP.INDEX% + 1 ELSE PRINT "The stack is empty.": STOP
|
||||
1080 RETURN
|
||||
1090 REM ** Print the stack
|
||||
1100 FOR PTR% = TOP.INDEX% TO MAX.INDEX%
|
||||
1110 PRINT USING "######.###"; ELEMS(PTR%);
|
||||
1120 NEXT PTR%
|
||||
1130 PRINT
|
||||
1140 RETURN
|
||||
1150 REM ** Push to the stack
|
||||
1160 IF TOP.INDEX% > 0 THEN TOP.INDEX% = TOP.INDEX% - 1: ELEMS(TOP.INDEX%) = X ELSE PRINT "The stack is full.": STOP
|
||||
1170 RETURN
|
||||
Loading…
Add table
Add a link
Reference in a new issue