Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Expression evaluator
#32
in qb code, this is what one gets:

Code:
DECLARE FUNCTION reduce.string$ (string1$)
DEFINT A-Z
CLS
PRINT reduce.string$("5 + 5 * 13")

FUNCTION reduce.string$ (string1$)

string1$ = "(" + string1$ + ")"
DO
read.loc = 1
start.p = 0
op$ = ""
string2$ = ""
string3$ = ""
op.exists = 0
num1$ = ""
num2$ = ""
num3$ = ""
st$ = ""
i = 0
j = 0
string1a$ = ""
string1b$ = ""

'get the location of the innermost parentheses

DO
start.p = INSTR(read.loc, string1$, "(")
IF start.p = 0 THEN EXIT DO
read.loc = start.p + 1
LOOP

'find the end of the parentheses-enclosed statement.
end.loc = INSTR(read.loc, string1$, ")")

'removing the innermost ( ), save everything before as string2, everything after as string3, and extract the parentheses-enclosed statement as string1.

string2$ = MID$(string1$, 1, read.loc - 2)
IF LEN(string1$) - end.loc > 0 THEN string3$ = MID$(string1$, 1 + end.loc, LEN(string1$) - end.loc) ELSE string3$ = ""
string1$ = MID$(string1$, read.loc, end.loc - read.loc)

'find an operand, starting from the left and going in the order: /, *, -, +
DO
op.exists = INSTR(string1$, "/ "): IF op.exists THEN op$ = "/": GOTO ex1
op.exists = INSTR(string1$, "* "): IF op.exists THEN op$ = "*": GOTO ex1
op.exists = INSTR(string1$, "- "): IF op.exists THEN op$ = "-": GOTO ex1
op.exists = INSTR(string1$, "+ "): IF op.exists THEN op$ = "+" ELSE EXIT DO
ex1:
'operate on the two numbers left and right of the operand.
'PRINT string2$ + "(" + string1$ + ")" + string3$
num1$ = "": num2$ = ""
i = op.exists - 2
DO
st$ = MID$(string1$, i, 1)
IF INSTR("-0123456789/", st$) <> 0 THEN
num2$ = st$ + num2$
ELSE
EXIT DO
END IF
i = i - 1
IF i = 0 THEN EXIT DO
LOOP

j = i: i = op.exists + 2
DO
st$ = MID$(string1$, i, 1)
IF INSTR("-0123456789/", st$) <> 0 THEN
num1$ = num1$ + st$
ELSE
i = i - 1
EXIT DO
END IF
IF i = LEN(string1$) THEN EXIT DO
i = i + 1
LOOP

SELECT CASE op$
CASE "+": num3$ = LTRIM$(STR$(VAL(num1$) + VAL(num2$)))
CASE "-": num3$ = LTRIM$(STR$(VAL(num1$) - VAL(num2$)))
CASE "*": num3$ = LTRIM$(STR$(VAL(num1$) * VAL(num2$)))
CASE "*": num3$ = LTRIM$(STR$(VAL(num2$) / VAL(num1$)))
END SELECT

string1a$ = MID$(string1$, 1, j)
string1b$ = MID$(string1$, i + 1, LEN(string1$) - i)
string1$ = string1a$ + num3$ + string1b$

LOOP

'now set the value of the function
string1$ = string2$ + string1$ + string3$
IF INSTR(string1$, " ") = 0 THEN EXIT DO
LOOP
reduce.string$ = string1$
END FUNCTION
Peace cannot be obtained without war. Why? If there is already peace, it is unnecessary for war. If there is no peace, there is already war."

Visit www.neobasic.net to see rubbish in all its finest.
Reply


Messages In This Thread
Expression evaluator - by Nexinarus - 07-10-2003, 10:48 AM
Expression evaluator - by Agamemnus - 07-10-2003, 05:46 PM
Expression evaluator - by toonski84 - 07-10-2003, 07:05 PM
Expression evaluator - by Moneo - 07-10-2003, 11:36 PM
Expression evaluator - by Antoni Gual - 07-10-2003, 11:48 PM
Re: Expression evaluator - by Mango - 07-11-2003, 12:29 AM
Expression evaluator - by toonski84 - 07-11-2003, 12:38 AM
Expression evaluator - by whitetiger0990 - 07-11-2003, 01:39 AM
Expression evaluator - by Moneo - 07-11-2003, 03:44 AM
Expression evaluator - by Nexinarus - 07-11-2003, 03:55 AM
Expression evaluator - by Moneo - 07-11-2003, 06:30 AM
Expression evaluator - by oracle - 07-11-2003, 07:09 AM
Expression evaluator - by Moneo - 07-11-2003, 09:02 AM
Expression evaluator - by na_th_an - 07-12-2003, 06:48 PM
Expression evaluator - by oracle - 07-14-2003, 03:37 AM
Expression evaluator - by Moneo - 07-14-2003, 04:18 AM
Expression evaluator - by Agamemnus - 07-14-2003, 05:06 AM
Expression evaluator - by Moneo - 07-14-2003, 05:22 AM
Expression evaluator - by na_th_an - 07-14-2003, 05:53 AM
Expression evaluator - by Moneo - 07-14-2003, 05:59 AM
huh? - by Agamemnus - 07-14-2003, 06:36 AM
Expression evaluator - by Moneo - 07-14-2003, 07:09 AM
Expression evaluator - by oracle - 07-14-2003, 07:12 AM
Expression evaluator - by Moneo - 07-14-2003, 07:35 AM
Expression evaluator - by relsoft - 07-14-2003, 10:30 AM
Expression evaluator - by Nexinarus - 07-14-2003, 04:12 PM
Expression evaluator - by na_th_an - 07-14-2003, 04:48 PM
Expression evaluator - by Agamemnus - 07-14-2003, 05:53 PM
Expression evaluator - by na_th_an - 07-14-2003, 06:55 PM
Expression evaluator - by Agamemnus - 07-14-2003, 08:26 PM
Expression evaluator - by na_th_an - 07-14-2003, 09:07 PM
Expression evaluator - by Agamemnus - 07-14-2003, 09:14 PM
Expression evaluator - by Moneo - 07-15-2003, 03:54 AM
Expression evaluator - by na_th_an - 07-15-2003, 04:37 AM
Expression evaluator - by Moneo - 07-15-2003, 06:06 AM
Expression evaluator - by Nexinarus - 07-16-2003, 03:34 AM
Expression evaluator - by Agamemnus - 07-16-2003, 04:03 AM
Expression evaluator - by na_th_an - 07-16-2003, 04:14 AM
Expression evaluator - by Nexinarus - 07-16-2003, 04:52 AM
Expression evaluator - by Agamemnus - 07-16-2003, 05:57 AM
Expression evaluator - by Nexinarus - 07-16-2003, 06:29 AM
Expression evaluator - by Moneo - 07-20-2003, 11:39 PM
Expression evaluator - by Nexinarus - 07-21-2003, 09:49 AM
Expression evaluator - by oracle - 07-21-2003, 09:51 AM
Expression evaluator - by Nexinarus - 07-21-2003, 10:00 AM
Expression evaluator - by Blitz - 07-22-2003, 07:38 AM
Expression evaluator - by Agamemnus - 07-22-2003, 07:12 PM
Expression evaluator - by Nexinarus - 07-23-2003, 09:40 AM
Expression evaluator - by na_th_an - 07-23-2003, 03:04 PM
Expression evaluator - by Agamemnus - 07-23-2003, 05:03 PM
Expression evaluator - by na_th_an - 07-23-2003, 05:16 PM
Expression evaluator - by Nexinarus - 07-24-2003, 12:41 AM
Expression evaluator - by Agamemnus - 07-24-2003, 12:57 AM
Expression evaluator - by Nexinarus - 07-24-2003, 09:46 AM
Expression evaluator - by toonski84 - 07-24-2003, 10:03 AM
Expression evaluator - by Nexinarus - 07-24-2003, 10:06 AM
Expression evaluator - by toonski84 - 07-24-2003, 10:14 AM
Expression evaluator - by Nexinarus - 07-24-2003, 02:16 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)