-' Logical equation solver\r
-' made by Svjatoslav Agejenko\r
-' in 2002\r
-' homepage: svjatoslav.eu\r
-' email: svjatoslav@svjatoslav.eu\r
- \r
-' Solves logical equations.\r
-' AND OR XOR etc...\r
+' TRUTH TABLE CALCULATOR\r
+'\r
+' By Svjatoslav Agejenko.\r
+' Email: svjatoslav@svjatoslav.eu\r
+' Homepage: http://www.svjatoslav.eu\r
+'\r
+' Changelog:\r
+' 2002, Initial version\r
+' 2024.09, Improved program readability using AI\r
+'\r
+'\r
+' A truth table is a mathematical table used to determine the output of a\r
+' logic function based on all possible combinations of inputs. Each row\r
+' represents a possible state of the input variables, with the\r
+' corresponding output value. Truth tables are crucial in designing and\r
+' understanding digital circuits, Boolean algebra, and logical\r
+' expressions.\r
+'\r
+' Implemented operations:\r
+' Equivalent ( Keyboard shortcut: 1 )\r
+' Implies ( Keyboard shortcut: 2 )\r
+' OR ( Keyboard shortcut: 3 )\r
+' AND ( Keyboard shortcut: 4 )\r
+' NOT ( Keyboard shortcut: 5 )\r
\r
DECLARE SUB rmslg (x1!, x3!, l!)\r
-DECLARE SUB getp (a!, b!)\r
-DECLARE SUB movm (x1!, n!)\r
+DECLARE SUB getP (a!, b!)\r
+DECLARE SUB movM (x1!, n!)\r
DECLARE SUB lihts (x1, x2, l)\r
DECLARE SUB klea ()\r
-DECLARE SUB lendm (x1!, m!)\r
+DECLARE SUB lendM (x1!, m!)\r
DECLARE SUB mov (x1!, n!)\r
-DECLARE SUB lendp (x1!, m!)\r
+DECLARE SUB lendP (x1!, m!)\r
DECLARE SUB teeslg (x1!, x2!, l!)\r
DECLARE SUB prepare ()\r
DECLARE SUB tee (x1!, x2!)\r
prepare\r
GOTO 13\r
\r
-SUB getp (a, b)\r
+SUB getP (a, b)\r
+' Determines the priority of logical operators\r
SELECT CASE a\r
CASE 5\r
b = 1\r
END SUB\r
\r
SUB klea\r
+' Waits for user input to clear the screen buffer\r
FOR a = 1 TO 50\r
a$ = INKEY$\r
NEXT a\r
END SUB\r
\r
SUB lahend (x1, x2)\r
-\r
+' Analyzes and prepares the logical equation for solving\r
DIM muu(65 TO 122)\r
FOR a = 65 TO 122\r
muu(a) = 0\r
NEXT a\r
\r
-muu(116) = 1\r
-muu(118) = 1\r
+muu(116) = 1 ' t\r
+muu(118) = 1 ' v\r
\r
nm = 0\r
FOR a = x1 TO x2\r
END IF\r
NEXT a\r
\r
-muun(nm + 1) = 116\r
-muun(nm + 2) = 118\r
+muun(nm + 1) = 116 ' t\r
+muun(nm + 2) = 118 ' v\r
\r
f = 2 ^ nm\r
tehl = f\r
NEXT a\r
\r
FOR a = 1 TO tehl\r
- muut(nm + 1, a) = 116\r
- muut(nm + 2, a) = 118\r
+ muut(nm + 1, a) = 116 ' t\r
+ muut(nm + 2, a) = 118 ' v\r
NEXT a\r
\r
nm = nm + 2\r
LOCATE 5, 1\r
teeslg x1, x2, a\r
\r
-'FOR b = x1 TO x2 + a\r
-'prn b, 20, 14, 1, CHR$(tehe(b))\r
-'NEXT b\r
-\r
tee x1, x2 + a\r
\r
FOR a = 0 TO 79\r
prn x2 + 1, a, 14, 0, CHR$(vast(a))\r
NEXT a\r
\r
-\r
END SUB\r
\r
-SUB lendm (x1, m)\r
+SUB lendM (x1, m)\r
+' Measures the length of a logical expression enclosed in parentheses\r
IF tehe(x1) <> 41 THEN m = 1: GOTO 19\r
c = x1\r
d = 1\r
19\r
END SUB\r
\r
-SUB lendp (x1, m)\r
+SUB lendP (x1, m)\r
+' Measures the length of a logical expression enclosed in parentheses\r
IF tehe(x1) <> 40 THEN m = 1: GOTO 17\r
c = x1\r
d = 1\r
END SUB\r
\r
SUB lihts (x1, x2, l)\r
+' Removes redundant parentheses from the logical expression\r
rmslg x1, x2, l1\r
l = l1\r
'BEEP\r
END SUB\r
\r
SUB mov (x1, n)\r
+' Moves a portion of the logical expression to the right\r
FOR a = 79 - n TO x1 STEP -1\r
tehe(a + n) = tehe(a)\r
xloc(a + n) = xloc(a)\r
NEXT a\r
END SUB\r
\r
-SUB movm (x1, n)\r
+SUB movM (x1, n)\r
+' Moves a portion of the logical expression to the left\r
FOR a = x1 TO 79 - n\r
tehe(a) = tehe(a + n)\r
xloc(a) = xloc(a + n)\r
END SUB\r
\r
SUB prepare\r
+' Prepares the logical equation for processing\r
CLS\r
\r
ln = 79\r
END SUB\r
\r
SUB prn (x, y, c, c1, a$)\r
+' Prints characters to the screen in a specific location and color\r
x1 = x * 8\r
y1 = (y + prnp) * 8\r
\r
END SUB\r
\r
SUB rmslg (x1, x3, l)\r
+' Removes redundant parentheses from the logical expression\r
x2 = x3\r
l2 = 0\r
\r
a = x1\r
26\r
IF tehe(a) = 40 THEN\r
- IF a = x1 THEN p1 = 100 ELSE getp tehe(a - 1), p1\r
+ IF a = x1 THEN p1 = 100 ELSE getP tehe(a - 1), p1\r
c = a\r
d = 1\r
p2 = 0\r
IF tehe(c) = 41 THEN d = d - 1\r
IF d = 1 THEN\r
IF (tehe(c) > 0) AND (tehe(c) <= 5) THEN\r
- getp tehe(c), b\r
+ getP tehe(c), b\r
IF b > p2 THEN p2 = b\r
END IF\r
END IF\r
IF d > 0 THEN GOTO 25\r
- IF c + 1 > x2 THEN p3 = 100 ELSE getp tehe(c + 1), p3\r
+ IF c + 1 > x2 THEN p3 = 100 ELSE getP tehe(c + 1), p3\r
\r
IF (p1 > p2) AND (p3 >= p2) THEN\r
- movm c, 1\r
- movm a, 1\r
+ movM c, 1\r
+ movM a, 1\r
l2 = l2 + 2\r
x2 = x2 - 2\r
a = a - 1\r
END SUB\r
\r
SUB sist\r
+' Interacts with the user to input a logical equation\r
CLS\r
prn 0, 0, 3, 0, "enter equation (ESC to quit) keys: 1 - " + CHR$(1) + " 2 - " + CHR$(2) + " 3 - " + CHR$(3) + " 4 - " + CHR$(4) + " 5 - " + CHR$(5)\r
prn 0, 1, 3, 0, "example: a" + CHR$(1) + "b" + CHR$(2) + "(g" + CHR$(3) + "b)"\r
END SUB\r
\r
SUB start\r
+' Initializes the screen and font\r
prnp = 0\r
\r
SCREEN 7\r
END SUB\r
\r
SUB tee (x1, x2)\r
+' Processes the logical equation and applies logical operations\r
DIM opr(1 TO 2, 1 TO tehl)\r
ng = 0\r
ngx = 0\r
END SUB\r
\r
SUB teeslg (x1, x4, l)\r
+' Prepares the logical equation for solving by simplifying expressions within parentheses\r
x2 = x4\r
h = 0\r
FOR e = 1 TO 4\r
d = 1\r
14\r
c = c + 1\r
- IF tehe(c) = 40 THEN d = d + 1\r
- IF tehe(c) = 41 THEN d = d - 1\r
+ IF tehe(c) = ASC("(") THEN d = d + 1\r
+ IF tehe(c) = ASC(")") THEN d = d - 1\r
IF d = 0 THEN GOTO 15\r
GOTO 14\r
15\r
IF a <= x2 THEN GOTO 21\r
NEXT e\r
l = h\r
-END SUB\r
-\r
+END SUB
\ No newline at end of file