Equation Calculator
This is a QuickBasic program, but I thought it might be useful in your VB projects. It calculates any given numeric equation.
AI
AI 요약: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.
소스 코드
CLS
ON ERROR GOTO ending
t1$ = "Equation Calculator 2.3.5"
t2$ = "By ePuter"
LOCATE 1, 40 - LEN(t1$) / 2: PRINT t1$
LOCATE 2, 40 - LEN(t2$) / 2: PRINT t2$
PRINT
PRINT " Welcome! The program allows you"
PRINT "to enter any equation containing"
PRINT "a parentheses ( or ), power as ^"
PRINT "*, /, +, -, ., and/or a negation"
PRINT "and will give you a step-by-step"
PRINT "solution according to the prior-"
PRINT "ity of the operations."
PRINT " The program will not understand"
PRINT "spaces or any other characters."
PRINT "Enjoy it!"
PRINT : PRINT "Example: 120*-(6+2/(4/2)^3)+60*(54-5)^(1/2)"
PRINT : PRINT
INPUT "Enter the equation: ", maineqzn$
PRINT
PRINT maineqzn$
power = 0
multiply = 1
divide = 2
add = 3
subtract = 4
DO
p = 1
DO
c1 = INSTR(p, maineqzn$, "(")
IF c1 = 0 THEN eqzn$ = maineqzn$: EXIT DO
c2 = INSTR(c1 + 1, maineqzn$, "(")
c3 = INSTR(maineqzn$, ")")
IF c3 < c2 OR c2 = 0 THEN eqzn$ = MID$(maineqzn$, c1 + 1, c3 - c1 - 1): EXIT DO ELSE p = c1 + 1
LOOP
DO
IF INSTR(eqzn$, "E") <> 0 THEN EXIT DO
a = INSTR(eqzn$, "^"): opr = power
IF a = 0 THEN a = INSTR(eqzn$, "*"): opr = multiply
IF a = 0 THEN a = INSTR(eqzn$, "/"): opr = divide
IF a = 0 THEN a = INSTR(eqzn$, "+"): opr = add
IF a = 0 THEN a = INSTR(eqzn$, "-"): opr = subtract
IF a = 1 THEN
a = INSTR(a + 1, eqzn$, "-"): IF a = 0 THEN EXIT DO
END IF
IF a = 0 THEN EXIT DO
i1 = a - 1
DO
repeat1:
i1 = i1 - 1
IF i1 <= 0 THEN i1 = 0: GOTO found1
b$ = MID$(eqzn$, i1, 1)
SELECT CASE VAL(b$)
CASE 1 TO 9: GOTO repeat1
CASE 0:
SELECT CASE b$
CASE ".": GOTO repeat1
CASE "0": GOTO repeat1
CASE "-": i1 = i1 - 1: GOTO found1
CASE ELSE: GOTO found1
END SELECT
END SELECT
LOOP
found1:
i1 = i1 + 1
num1 = VAL(MID$(eqzn$, i1, a - i1))
i2 = a + 1
DO
repeat2:
i2 = i2 + 1
IF i2 >= LEN(eqzn$) THEN i2 = LEN(eqzn$) + 1: GOTO found2
b$ = MID$(eqzn$, i2, 1)
SELECT CASE VAL(b$)
CASE 1 TO 9: GOTO repeat2
CASE 0:
SELECT CASE b$
CASE ".": GOTO repeat2
CASE "0": GOTO repeat2
CASE ELSE: GOTO found2
END SELECT
END SELECT
LOOP
found2:
i2 = i2 - 1
num2 = VAL(MID$(eqzn$, a + 1, i2 - a))
SELECT CASE opr
CASE power: num = num1 ^ num2
CASE multiply: num = num1 * num2
CASE divide:
IF num2 = 0 THEN PRINT : PRINT "Warning: Division by zero.": END ELSE num = num1 / num2
CASE add: num = num1 + num2
CASE subtract: num = num1 - num2
END SELECT
IF num >= 0 THEN
num$ = MID$(STR$(num), 2)
ELSE
num$ = STR$(num)
END IF
IF num1 < 0 THEN
IF num >= 0 AND i1 > 1 THEN num$ = "+" + num$
END IF
eqzn$ = LEFT$(eqzn$, i1 - 1) + num$ + RIGHT$(eqzn$, LEN(eqzn$) - i2)
IF c1 = 0 THEN
PRINT eqzn$
ELSE
PRINT LEFT$(maineqzn$, c1) + eqzn$ + RIGHT$(maineqzn$, LEN(maineqzn$) - c3 + 1)
END IF
IF num < 0 THEN
IF eqzn$ = STR$(num) THEN EXIT DO
ELSE
IF eqzn$ = MID$(STR$(num), 2) THEN EXIT DO
END IF
LOOP
IF c1 <> 0 THEN
maineqzn$ = LEFT$(maineqzn$, c1 - 1) + eqzn$ + RIGHT$(maineqzn$, LEN(maineqzn$) - c3)
PRINT maineqzn$
END IF
LOOP UNTIL c1 = 0
END
ending:
PRINT : PRINT "Warning: Syntax error or overflow.": END
원본 댓글 (3)
Wayback Machine에서 복구됨