From: Svjatoslav Agejenko Date: Mon, 30 Jun 2025 16:26:59 +0000 (+0300) Subject: Better code readability X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=commitdiff_plain;h=f4eaf2b3791f21b8ef103b21633da9b7acdba2d2;p=qbasicapps.git Better code readability --- diff --git a/Math/Truth table calculator/truth.bas b/Math/Truth table calculator/truth.bas index 9d417f2..2d7bf8d 100755 --- a/Math/Truth table calculator/truth.bas +++ b/Math/Truth table calculator/truth.bas @@ -6,7 +6,7 @@ ' ' Changelog: ' 2002, Initial version -' 2024.09, Improved program readability using AI +' 2024 - 2025, Improved program readability ' ' ' A truth table is a mathematical table used to determine the output of a @@ -38,12 +38,13 @@ DECLARE SUB printText (x!, y!, c!, c1!, a$) DECLARE SUB sist () DECLARE SUB start () DIM SHARED font(0 TO 7, 0 TO 7, 0 TO 122) -DIM SHARED tehe(0 TO 79) -DIM SHARED muut(1 TO 8, 1 TO 100) -DIM SHARED muun(1 TO 8) -DIM SHARED vast(1 TO 100) -DIM SHARED xloc(0 TO 79) -DIM SHARED xlah(0 TO 79, 0 TO 100) + +' Logical expression storage and processing arrays +DIM SHARED logicalExpression(0 TO 79) ' Stores ASCII values of logical expression +DIM SHARED variableValues(1 TO 8, 1 TO 100) ' Stores variable values for each combination +DIM SHARED variableNames(1 TO 8) ' Stores ASCII values of variable names +DIM SHARED resultValues(1 TO 100) ' Stores computed result values +DIM SHARED expressionPosition(0 TO 79) ' Stores screen positions of expression characters DIM SHARED xlahn DIM SHARED tehl DIM SHARED nm @@ -92,18 +93,18 @@ muu(118) = 1 ' v nm = 0 FOR a = x1 TO x2 - b = tehe(a) + b = logicalExpression(a) IF ((b >= 65) AND (b <= 90)) OR ((b >= 97) AND (b <= 122)) THEN IF muu(b) = 0 THEN nm = nm + 1 - muun(nm) = b + variableNames(nm) = b muu(b) = 1 END IF END IF NEXT a -muun(nm + 1) = 116 ' t -muun(nm + 2) = 118 ' v +variableNames(nm + 1) = 116 ' t +variableNames(nm + 2) = 118 ' v f = 2 ^ nm tehl = f @@ -114,22 +115,22 @@ FOR a = 1 TO nm FOR b = 1 TO 2 ^ nm IF e > f THEN d = -d: e = 1 IF d = 1 THEN c = ASC("t") ELSE c = ASC("v") - muut(a, b) = c + variableValues(a, b) = c e = e + 1 NEXT b NEXT a FOR a = 1 TO tehl - muut(nm + 1, a) = 116 ' t - muut(nm + 2, a) = 118 ' v + variableValues(nm + 1, a) = 116 ' t + variableValues(nm + 2, a) = 118 ' v NEXT a nm = nm + 2 DIM bck(0 TO 79) FOR a = 0 TO 79 - bck(a) = tehe(a) - xloc(a) = a + bck(a) = logicalExpression(a) + expressionPosition(a) = a NEXT a LOCATE 5, 1 @@ -138,24 +139,24 @@ teeslg x1, x2, a tee x1, x2 + a FOR a = 0 TO 79 - tehe(a) = bck(a) + logicalExpression(a) = bck(a) NEXT a FOR a = 1 TO tehl - printText x2 + 1, a, 14, 0, CHR$(vast(a)) + printText x2 + 1, a, 14, 0, CHR$(resultValues(a)) NEXT a END SUB SUB lendm (x1, m) ' Measures the length of a logical expression enclosed in parentheses -IF tehe(x1) <> 41 THEN m = 1: GOTO 19 +IF logicalExpression(x1) <> 41 THEN m = 1: GOTO 19 c = x1 d = 1 20 c = c - 1 -IF tehe(c) = 40 THEN d = d - 1 -IF tehe(c) = 41 THEN d = d + 1 +IF logicalExpression(c) = 40 THEN d = d - 1 +IF logicalExpression(c) = 41 THEN d = d + 1 IF d > 0 THEN GOTO 20 m = x1 - c 19 @@ -163,13 +164,13 @@ END SUB SUB lendp (x1, m) ' Measures the length of a logical expression enclosed in parentheses -IF tehe(x1) <> 40 THEN m = 1: GOTO 17 +IF logicalExpression(x1) <> 40 THEN m = 1: GOTO 17 c = x1 d = 1 18 c = c + 1 -IF tehe(c) = 40 THEN d = d + 1 -IF tehe(c) = 41 THEN d = d - 1 +IF logicalExpression(c) = 40 THEN d = d + 1 +IF logicalExpression(c) = 41 THEN d = d - 1 IF d > 0 THEN GOTO 18 m = c - x1 + 1 17 @@ -178,16 +179,16 @@ END SUB SUB mov (x1, n) ' Moves a portion of the logical expression to the right FOR a = 79 - n TO x1 STEP -1 - tehe(a + n) = tehe(a) - xloc(a + n) = xloc(a) + logicalExpression(a + n) = logicalExpression(a) + expressionPosition(a + n) = expressionPosition(a) NEXT a END SUB SUB movM (x1, n) ' Moves a portion of the logical expression to the left FOR a = x1 TO 79 - n - tehe(a) = tehe(a + n) - xloc(a) = xloc(a + n) + logicalExpression(a) = logicalExpression(a + n) + expressionPosition(a) = expressionPosition(a + n) NEXT a END SUB @@ -198,9 +199,9 @@ CLS ln = 79 FOR a = 0 TO 79 5 - IF tehe(a) = 32 OR tehe(a) = 0 THEN + IF logicalExpression(a) = 32 OR logicalExpression(a) = 0 THEN FOR b = a TO 78 - tehe(b) = tehe(b + 1) + logicalExpression(b) = logicalExpression(b + 1) NEXT b ln = ln - 1 IF ln <= a - 1 THEN GOTO 6 @@ -212,7 +213,7 @@ NEXT a CLS FOR a = 0 TO ln - printText a, 0, 13, 1, CHR$(tehe(a)) + printText a, 0, 13, 1, CHR$(logicalExpression(a)) NEXT a printText 0, 1, 7, 0, SPACE$(79) @@ -252,30 +253,30 @@ SUB removeRedundancies (startIndex, endIndex, removalCount) parenthesesCount = 0 a = startIndex -26 IF tehe(a) = 40 THEN +26 IF logicalExpression(a) = 40 THEN ' We found an opening parenthesis. Now let's see if it can be removed. - IF a = startIndex THEN p1 = 100 ELSE getOperatorPriority tehe(a - 1), p1 + IF a = startIndex THEN p1 = 100 ELSE getOperatorPriority logicalExpression(a - 1), p1 c = a d = 1 p2 = 0 25 c = c + 1 - IF tehe(c) = 40 THEN d = d + 1 - IF tehe(c) = 41 THEN d = d - 1 + IF logicalExpression(c) = 40 THEN d = d + 1 + IF logicalExpression(c) = 41 THEN d = d - 1 ' Once d returns to 1, we are back to one level of parentheses, ' meaning we can check operator priority inside. IF d = 1 THEN - IF (tehe(c) > 0) AND (tehe(c) <= 5) THEN - getOperatorPriority tehe(c), b + IF (logicalExpression(c) > 0) AND (logicalExpression(c) <= 5) THEN + getOperatorPriority logicalExpression(c), b IF b > p2 THEN p2 = b END IF END IF IF d > 0 THEN GOTO 25 - IF c + 1 > currentEnd THEN p3 = 100 ELSE getOperatorPriority tehe(c + 1), p3 + IF c + 1 > currentEnd THEN p3 = 100 ELSE getOperatorPriority logicalExpression(c + 1), p3 ' If the operator outside is higher priority than what's inside, ' we can safely remove the parentheses. @@ -301,13 +302,13 @@ printText 0, 0, 3, 0, "Enter equation (ESC to quit) keys: 1 - " + CHR$(1) + " printText 0, 1, 3, 0, "Example: a" + CHR$(1) + "b" + CHR$(2) + "(g" + CHR$(3) + "b)" FOR a = 0 TO 79 - tehe(a) = 0 + logicalExpression(a) = 0 NEXT a x = 0 1 FOR a = 0 TO 79 - IF a = x THEN printText a, 2, 14, 1, CHR$(tehe(a)) ELSE printText a, 2, 3, 0, CHR$(tehe(a)) + IF a = x THEN printText a, 2, 14, 1, CHR$(logicalExpression(a)) ELSE printText a, 2, 3, 0, CHR$(logicalExpression(a)) NEXT a 2 a$ = INKEY$ @@ -324,14 +325,14 @@ IF LEN(a$) = 1 THEN CASE 32, 40, 41, 65 TO 90, 97 TO 122 3 FOR a = 78 TO x STEP -1 - tehe(a + 1) = tehe(a) + logicalExpression(a + 1) = logicalExpression(a) NEXT a - tehe(x) = ASC(a$) + logicalExpression(x) = ASC(a$) x = x + 1 CASE 8 IF x > 0 THEN FOR a = x - 1 TO 78 - tehe(a) = tehe(a + 1) + logicalExpression(a) = logicalExpression(a + 1) NEXT a x = x - 1 END IF @@ -414,22 +415,22 @@ oe = 0 oex = 0 FOR a = x1 TO x2 - b = tehe(a) + b = logicalExpression(a) SELECT CASE b CASE 40 c = a d = 1 10 c = c + 1 - IF tehe(c) = ASC("(") THEN d = d + 1 - IF tehe(c) = ASC(")") THEN d = d - 1 + IF logicalExpression(c) = ASC("(") THEN d = d + 1 + IF logicalExpression(c) = ASC(")") THEN d = d - 1 IF d = 0 THEN GOTO 11 GOTO 10 11 tee a + 1, c - 1 a = c FOR c = 1 TO tehl - opr(oprm, c) = vast(c) + opr(oprm, c) = resultValues(c) NEXT c GOTO 12 CASE 5 @@ -440,12 +441,12 @@ FOR a = x1 TO x2 oex = a CASE 65 TO 90, 97 TO 122 FOR c = 1 TO nm - IF muun(c) = b THEN d = c: GOTO 8 + IF variableNames(c) = b THEN d = c: GOTO 8 NEXT c 8 FOR c = 1 TO tehl - opr(oprm, c) = muut(d, c) - printText xloc(a), c, 3, 0, CHR$(muut(d, c)) + opr(oprm, c) = variableValues(d, c) + printText expressionPosition(a), c, 3, 0, CHR$(variableValues(d, c)) NEXT c 12 IF ng = 1 THEN GOSUB mkneg @@ -457,7 +458,7 @@ FOR a = x1 TO x2 e = opr(2, c) IF d = e THEN f = ASC("t") ELSE f = ASC("v") opr(1, c) = f - printText xloc(oex), c, 12, 0, CHR$(f) + printText expressionPosition(oex), c, 12, 0, CHR$(f) NEXT c CASE 2 FOR c = 1 TO tehl @@ -466,7 +467,7 @@ FOR a = x1 TO x2 f = ASC("t") IF (d = ASC("t")) AND (e = ASC("v")) THEN f = ASC("v") opr(1, c) = f - printText xloc(oex), c, 12, 0, CHR$(f) + printText expressionPosition(oex), c, 12, 0, CHR$(f) NEXT c CASE 3 FOR c = 1 TO tehl @@ -475,7 +476,7 @@ FOR a = x1 TO x2 f = ASC("t") IF (d = ASC("v")) AND (e = ASC("v")) THEN f = ASC("v") opr(1, c) = f - printText xloc(oex), c, 12, 0, CHR$(f) + printText expressionPosition(oex), c, 12, 0, CHR$(f) NEXT c CASE 4 FOR c = 1 TO tehl @@ -484,7 +485,7 @@ FOR a = x1 TO x2 f = ASC("v") IF (d = ASC("t")) AND (e = ASC("t")) THEN f = ASC("t") opr(1, c) = f - printText xloc(oex), c, 12, 0, CHR$(f) + printText expressionPosition(oex), c, 12, 0, CHR$(f) NEXT c END SELECT ELSE @@ -500,7 +501,7 @@ mkneg: FOR c = 1 TO tehl d = opr(oprm, c) IF d = ASC("t") THEN d = ASC("v") ELSE d = ASC("t") - printText xloc(ngx), c, 4, 0, CHR$(d) + printText expressionPosition(ngx), c, 4, 0, CHR$(d) opr(oprm, c) = d NEXT c ng = 0 @@ -508,7 +509,7 @@ RETURN 9 FOR c = 1 TO tehl - vast(c) = opr(1, c) + resultValues(c) = opr(1, c) NEXT c END SUB @@ -520,14 +521,14 @@ FOR e = 1 TO 4 g = 1 a = x1 21 - b = tehe(a) + b = logicalExpression(a) IF b = 40 THEN c = a d = 1 14 c = c + 1 - IF tehe(c) = ASC("(") THEN d = d + 1 - IF tehe(c) = ASC(")") THEN d = d - 1 + IF logicalExpression(c) = ASC("(") THEN d = d + 1 + IF logicalExpression(c) = ASC(")") THEN d = d - 1 IF d = 0 THEN GOTO 15 GOTO 14 15 @@ -540,10 +541,10 @@ FOR e = 1 TO 4 IF (b = 5) AND (e = 1) AND (g > 1) THEN mov a, 1 - tehe(a) = 40 + logicalExpression(a) = 40 lendp a + 2, f mov a + 2 + f, 1 - tehe(a + 2 + f) = 41 + logicalExpression(a + 2 + f) = 41 h = h + 2 x2 = x2 + 2 a = a + 2 + f @@ -553,10 +554,10 @@ FOR e = 1 TO 4 IF (b = 3 OR b = 4) AND (e = 2) AND (g > 2) THEN lendm a - 1, f mov a - f, 1 - tehe(a - f) = 40 + logicalExpression(a - f) = 40 lendp a + 2, f mov a + 2 + f, 1 - tehe(a + 2 + f) = 41 + logicalExpression(a + 2 + f) = 41 h = h + 2 x2 = x2 + 2 a = a + 2 + f @@ -566,10 +567,10 @@ FOR e = 1 TO 4 IF (b = 2) AND (e = 3) AND (g > 3) THEN lendm a - 1, f mov a - f, 1 - tehe(a - f) = 40 + logicalExpression(a - f) = 40 lendp a + 2, f mov a + 2 + f, 1 - tehe(a + 2 + f) = 41 + logicalExpression(a + 2 + f) = 41 h = h + 2 x2 = x2 + 2 a = a + 2 + f