Can someone help me?
This is probably the most terrible approach I could take.
But it seems to be the most compact so far. out of all the ones i've used/tried that didn't quite work.
[pbcode]
; PROJECT : Smart_Parse
; AUTHOR : LemonWizard
; CREATED : 4/20/2014
; EDITED : 4/20/2014
; ---------------------------------------------------------------------
BB$="10+20+100-8"
print 10+20+100-8
dim arr$(100)
dim operations$(100)
dim BB$(100)
tkns=splittoarray(BB$, "+"+"-"+"/"+"*", arr$(), 0)
found=0
for t=0 to len(BB$)
if mid$(BB$, t, 1)="+"
operations$(found)="add"
found=found+1
endif
if mid$(BB$, t, 1)="-"
operations$(found)="sub"
found=found+1
endif
if mid$(BB$, t, 1)="*"
operations$(found)="mult"
found=found+1
endif
if mid$(BB$, t, 1)="/"
operations$(found)="div"
found=found+1
endif
next t
st=0
for a=0 to tkns+found
if operations$(a)="add"
if a=0
n=val(arr$(a))+val(arr$(a+1))
st=st+2
endif
if a>0
n=n+val(arr$(a))
st=st+1
endif
endif
if operations$(a)="sub"
if a=0
n=val(arr$(a))-val(arr$(a+1))
st=st+2
endif
if a>0
n=(n-val(arr$(st)))
st=st+1
endif
endif
if operations$(a)="mult"
if a=0
n=val(arr$(a))*val(arr$(a+1))
st=st+2
endif
if a>0
n=n*val(arr$(st))
st=st+1
endif
endif
if operations$(a)="div"
if a=0
n=val(arr$(a))/val(arr$(a+1))
st=st+2
endif
if a>0
n=(n/val( arr$(st)) )
st=st+1
endif
endif
//print "step is " +str$(a)
//print "value of N is "+str$(n)
//print "the value of the last operation was " +str$( val( arr$(st)))
next a
print "the answer is " +str$( n)
waitkey
waitnokey
[/pbcode]
QuoteCan someone help me?
Pretty much everything you need to know is explained in the Simple (tokenised) Math Formula Tutorial (http://www.underwaredesign.com/?page=programs.PlayBASIC-Source-Codes)..
Here's a tweaked version of your code. Be aware there's no precedence !
[pbcode]
Constant MathOpp_ADD =1
Constant MathOpp_SUB =2
BB$="10+20+100-8"
print 10+20+100-8
dim Numbers(100)
dim operations(100)
; ---------------------------------------------------------------------------
; split the start expression on symbols
; ---------------------------------------------------------------------------
tkns=splittoarray(BB$, "+-", numbers(), 0)
NumberOfOperators=0
; ---------------------------------------------------------------------------
; search for operators
; ---------------------------------------------------------------------------
for t=0 to len(BB$)
ThisCHR=mid(BB$, t)
if ThisChr=asc("+")
operations(NumberOfOperators)=MathOpp_ADD
NumberOfOperators++
endif
if ThisChr=asc("-")
operations(NumberOfOperators)=MathOpp_SUB
NumberOfOperators++
endif
next t
; ---------------------------------------------------------------------------
; evaulate expression
; ---------------------------------------------------------------------------
Result =Numbers(0)
NumberINdex=1
For lp=0 to NumberOfOperators-1
ThisValue=Numbers(NumberIndex)
Operation =operations(lp)
Select Operation
case MathOpp_ADD
Result +=ThisValue
print "Add "+str$(Thisvalue)
NumberIndex++
case MathOpp_SUB
Result -=ThisValue
print "Sub "+str$(Thisvalue)
NumberIndex++
default
print " unknown"
endselect
next
print "Result="+Str$(result)
sync
waitkey
[/pbcode]
Thank you :D
no worries, but where do i send the invoice ? :P
Quote from: kevin on April 21, 2014, 01:05:38 AM
no worries, but where do i send the invoice ? :P
you're funny Kevin :O
okay so I tried to tweak the version I was working on based on what I saw you do but no matter what , mine is still throwing messed up results.... can you explain to me what you changed precisely so I can understand where I went wrong? I just wanna know if it's something to do with val or something. you know. Just trying to wrap my head around this. >.<
it works like this Simple (tokenised) Math Formula Tutorial (http://www.underwaredesign.com/?page=programs.PlayBASIC-Source-Codes)..
part 1) break the input string into numbers via SplitToArray
part 2) skims the original string looking for operator characters, if it one exists, it puts it into an operators array (stack).
part 3) grabs the first value form the numbers (our starting value), the proceeds to scan the operators array. When it finds a known operator (Addition/subtraction) it grabs the next value from the numbers arrays and either adds or subtract it from the result...
really you should read the tutorial, this is exactly why i wrote it !
Thanks I will