  # Calc problem... already :-(

Discussion in 'Questions (Windows Mobile)' started by RandomCoder, Oct 9, 2007.

1. I'm attempting a go at the calculator competition (see this thread http://www.basic4ppc.com/forum/showthread.php?t=914).

In doing so I would like to take what I believe is a rather unique approach, however I am already experiencing problems and would like your help.

The problem is this....

Code:
`x = 2 + 3MsgBox(x)`
Works like a charm, giving 5 as the result (can't really make it more simple than that)

But now when I do this instead...
Code:
`x = 2 & chr(43) & 3MsgBox(x)`
I get 2+3 instead of the desired mathematical result.

So is there a way of forcing the compiler to treat the expression as an equation rather than a string?

Regards,
RandomCoder

2. I personally don't like the weak typing of B4PPC but you can get it to work for you.

Code:
`x = 2 & Chr(43) & 3 & "*" & 4 ' build a valid expression y = 0 + x ' coercion forces evaluation of the stringMsgbox(y) ' success`
If you use this then you will need an error handler unless you can parse the string for mathematical correctness first.

EDIT: Or use Isnumber() on the string and not try the coercion if it returns false. This approach supports */+- and ^ but not functions such as abs() etc.

EDIT EDIT: Actually Isnumber() isn't reliable in this instance. I don't know why I thought it would be. Stick to the error handler approach!

Last edited: Oct 9, 2007
3. This trick is dangerous.
I recommend you to use the code sample in the link I've posted instead.
It will only work if evaluated once.
This code for example will fail on the second time:
Code:
`Sub App_Start    For i = 1 To 2        x = "2*5+4"         y = 0 + x         Msgbox(y)    NextEnd Sub`
The reason it fails is that there is an optimization process that optimizes calculations after the first calculation.

4. Pity - I thought that it might be quite useful:sign0148:

EDIT: Actually this probably explains some inconsistent results and inexplicable errors I have encountered trying some fairly complicated string maniipulation where I was (rather less blatently than above) using B4PPCs apparent use of weak typing to reduce the amount of code.

Last edited: Oct 9, 2007
5. Thanks for the input guys, I had already tried using a variety of amplisand, brackets and single quotes but all to no avail.

With some help from a friend of mine he has got it working using the following method...

Code:
`x=(2 Chr(43) 3)MsgBox(x)`
I must admit that I had already tried this without the brackets and all I got was a value of 2, but with the brackets it's evaluated correctly and produces a value of 5.

Thanks for the help.

Regards,
RandomCoder