Improve documentation for truth table generator
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 4 Sep 2024 19:57:18 +0000 (22:57 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Wed, 4 Sep 2024 19:57:18 +0000 (22:57 +0300)
Math/Truth table calculator/doc/index.org
Math/Truth table calculator/truth.bas

index 58783bd..cd58c50 100644 (file)
@@ -16,7 +16,6 @@ the input variables, with the corresponding output value. Truth tables are cruci
 designing and understanding digital circuits, Boolean algebra, and logical expressions.
 
 * Implemented logical operations
-
 ** Equivalent ( ⇔ , 1 )
 
 The equivalent operation, also known as logical biconditional, is true if and only if
@@ -47,7 +46,6 @@ Truth table:
 | F | T | T     |
 | F | F | T     |
 
-
 ** OR ( ∨ , 3 )
 
 The OR operation, also known as logical disjunction, is true if at
@@ -77,7 +75,6 @@ Truth table:
 | F | T | F     |
 | F | F | F     |
 
-
 ** NOT ( ¬ , 5 )
 
 The NOT operation, also known as logical negation, inverts the value
@@ -90,3 +87,45 @@ Truth Table:
 |---+----|
 | T | F  |
 | F | T  |
+* Examples
+
+** Example: (A ∧ B) ∨ ¬C
+
+| A | B | C | (A ∧ B) ∨ ¬C |
+|---+---+---+--------------|
+| T | T | T | T            |
+| T | T | F | T            |
+| T | F | T | F            |
+| T | F | F | T            |
+| F | T | T | F            |
+| F | T | F | T            |
+| F | F | T | F            |
+| F | F | F | T            |
+
+** Example: A ⇒ (B ∨ ¬C)
+
+| A | B | C | A ⇒ (B ∨ ¬C) |
+|---+---+---+--------------|
+| T | T | T | T            |
+| T | T | F | T            |
+| T | F | T | F            |
+| T | F | F | T            |
+| F | T | T | T            |
+| F | T | F | T            |
+| F | F | T | T            |
+| F | F | F | T            |
+
+** Example: (A ⇔ B) ∧ C
+
+Truth Table:
+
+| A | B | C | (A ⇔ B) ∧ C |
+|---+---+---+-------------|
+| T | T | T | T           |
+| T | T | F | F           |
+| T | F | T | F           |
+| T | F | F | F           |
+| F | T | T | F           |
+| F | T | F | F           |
+| F | F | T | T           |
+| F | F | F | F           |
index 4692e89..9116de5 100755 (executable)
@@ -1,20 +1,36 @@
-' 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
@@ -41,7 +57,8 @@ sist
 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
@@ -57,20 +74,21 @@ END SELECT
 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
@@ -84,8 +102,8 @@ FOR a = x1 TO x2
     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
@@ -102,8 +120,8 @@ FOR a = 1 TO nm
 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
@@ -117,10 +135,6 @@ NEXT a
 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
@@ -131,10 +145,10 @@ FOR a = 1 TO tehl
     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
@@ -147,7 +161,8 @@ m = x1 - c
 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
@@ -161,6 +176,7 @@ m = c - x1 + 1
 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
@@ -171,13 +187,15 @@ NEXT a
 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
@@ -185,6 +203,7 @@ NEXT a
 END SUB\r
 \r
 SUB prepare\r
+' Prepares the logical equation for processing\r
 CLS\r
 \r
 ln = 79\r
@@ -227,6 +246,7 @@ a$ = INPUT$(1)
 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
@@ -247,6 +267,7 @@ NEXT b
 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
@@ -254,7 +275,7 @@ l2 = 0
 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
@@ -264,16 +285,16 @@ IF tehe(a) = 40 THEN
     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
@@ -286,6 +307,7 @@ l = l2
 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
@@ -340,6 +362,7 @@ GOTO 1
 END SUB\r
 \r
 SUB start\r
+' Initializes the screen and font\r
 prnp = 0\r
 \r
 SCREEN 7\r
@@ -396,6 +419,7 @@ SCREEN 12
 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
@@ -502,6 +526,7 @@ NEXT c
 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
@@ -515,8 +540,8 @@ FOR e = 1 TO 4
         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
@@ -581,5 +606,4 @@ FOR e = 1 TO 4
     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