Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
70
Task/Truth-table/BASIC/truth-table.basic
Normal file
70
Task/Truth-table/BASIC/truth-table.basic
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
10 DEFINT A-Z: DATA "~",4,"&",3,"|",2,"^",2,"=>",1
|
||||
20 DIM V(26),E(255),S(255),C(5),C$(5)
|
||||
30 FOR I=1 TO 5: READ C$(I),C(I): NEXT
|
||||
40 PRINT "Boolean expression evaluator"
|
||||
50 PRINT "----------------------------"
|
||||
60 PRINT "Operators are: ~ (not), & (and), | (or), ^ (xor), => (implies)."
|
||||
70 PRINT "Variables are A-Z. Constant False and True are 0 and 1."
|
||||
100 FOR I=1 TO 26: V(I)=0: NEXT
|
||||
110 PRINT: LINE INPUT "Enter an expression: ";A$
|
||||
120 E$="": E=0: S=0
|
||||
130 FOR I=1 TO LEN(A$)
|
||||
140 I$=MID$(A$,I,1)
|
||||
150 IF I$<>" " THEN E$=E$+I$
|
||||
160 NEXT
|
||||
170 IF E$="" THEN END ELSE Y$=E$
|
||||
180 IF E$="" THEN 330
|
||||
190 A$=LEFT$(E$,1): A=ASC(A$) OR 32: B$=RIGHT$(E$,LEN(E$)-1)
|
||||
200 IF A>=97 AND A<=122 THEN E(E)=A-33: E=E+1: E$=B$: GOTO 180
|
||||
210 IF A$="0" OR A$="1" THEN E(E)=VAL(A$)+32: E=E+1: E$=B$: GOTO 180
|
||||
220 IF A$="(" THEN S(S)=97: S=S+1: E$=B$: GOTO 180
|
||||
225 IF A$=")" THEN E$=B$: GOTO 300
|
||||
227 I=1
|
||||
230 IF LEFT$(E$,LEN(C$(I)))=C$(I) THEN 250 ELSE I=I+1: IF I<6 THEN 230
|
||||
240 PRINT "Parse error at: ";E$: PRINT: GOTO 100
|
||||
250 A$=C$(I): E$=RIGHT$(E$,LEN(E$)-LEN(A$))
|
||||
260 IF I=1 THEN S(S)=1: S=S+1: GOTO 180
|
||||
270 IF S=0 THEN 290
|
||||
275 IF S(S-1)<>97 AND C(S(S-1) AND 31)>=C(I) THEN 280 ELSE 290
|
||||
280 S=S-1: E(E)=S(S): E=E+1: GOTO 270
|
||||
290 S(S)=I: S=S+1: GOTO 180
|
||||
300 IF S=0 THEN PRINT "Error: missing (!": GOTO 100
|
||||
310 IF S(S-1)<>97 THEN S=S-1: E(E)=S(S): E=E+1: GOTO 300
|
||||
320 S=S-1: GOTO 180
|
||||
330 IF S=0 THEN 350 ELSE S=S-1
|
||||
335 IF S(S)=97 THEN PRINT "Error: missing )!": GOTO 100
|
||||
340 E(E)=S(S): E=E+1: GOTO 330
|
||||
350 V$=""
|
||||
360 FOR I=0 TO E-1
|
||||
370 IF (E(I) AND 224)<>64 THEN 390
|
||||
380 A$=CHR$(E(I)+1): IF INSTR(V$,A$)=0 THEN V$=V$+A$
|
||||
390 NEXT
|
||||
400 GOSUB 600
|
||||
410 FOR I=1 TO LEN(V$): PRINT MID$(V$,I,1);" ";: NEXT
|
||||
420 PRINT "| ";Y$
|
||||
430 PRINT STRING$(2+2*LEN(V$)+LEN(Y$),"-")
|
||||
440 FOR J=1 TO 2^LEN(V$)
|
||||
450 FOR I=1 TO LEN(V$)
|
||||
460 IF V(I) THEN PRINT "T "; ELSE PRINT "F ";
|
||||
470 NEXT
|
||||
480 PRINT "| ";: GOSUB 600: IF S(0) THEN PRINT "T" ELSE PRINT "F"
|
||||
490 I=1
|
||||
500 IF V(I) THEN V(I)=0: I=I+1: GOTO 500 ELSE V(I)=1
|
||||
510 NEXT
|
||||
520 GOTO 100
|
||||
600 S=0
|
||||
610 FOR I=0 TO E-1: T=E(I) AND 224: V=E(I) AND 31
|
||||
620 IF T=0 THEN ON V GOTO 700,710,720,730,740
|
||||
630 IF T=32 THEN S(S)=-V: S=S+1: GOTO 650
|
||||
640 IF T=64 THEN S(S)=V(INSTR(V$,CHR$(V+65))): S=S+1: GOTO 650
|
||||
650 NEXT
|
||||
660 IF S<>1 THEN PRINT "Missing operator": GOTO 100
|
||||
670 RETURN
|
||||
700 IF S<1 THEN 770 ELSE S(S-1)=1-S(S-1): GOTO 650
|
||||
710 IF S<2 THEN 770 ELSE S=S-1:S(S-1)=S(S-1) AND S(S): GOTO 650
|
||||
720 IF S<2 THEN 770 ELSE S=S-1:S(S-1)=S(S-1) OR S(S): GOTO 650
|
||||
730 IF S<2 THEN 770 ELSE S=S-1:S(S-1)=S(S-1) XOR S(S): GOTO 650
|
||||
740 IF S<2 THEN 770 ELSE S=S-1
|
||||
750 IF S(S-1) THEN S(S-1)=S(S) ELSE S(S-1)=-1
|
||||
760 GOTO 650
|
||||
770 PRINT "Missing operand": GOTO 100
|
||||
Loading…
Add table
Add a link
Reference in a new issue