In-Program Evaluation

In my projects I often need to evaluate expressions. So I
created a class that provides evaluation of expressions with the
posibility to declare variables and easy functions. For this
article I include the XEvaluate-class in a ‘calculator’-dialog,
but normaly, I use the class in my application like this: XString
erg = Evaluate("1+2*sqr(3)").

!!! The XString-class that XEvaluate uses, was also
contributed at codeguru.

You can use external variables in a XDoubleMap. This typedef
is allready defined in XEvaluate.h (typedef CMap<CString,
LPCTSTR, double, double> XDoubleMap;):

	XDoubleMap var;
	var["alpha"] = 10;
	var["beta"] = 20;
	var["test"] = 1.234;

	double erg = dtoa(Evaluate("alpha+beta", var));

It’s possible to use userdefined functions with one argument
(this argument has to be ‘x’)

	Evaluate("f:=sin(x)+cos(x)");
	double erg = dtoa(Evaluate("f(pi/2)"));

You can also call Evaluate with more than one expression, if
you divide the expressions by a semikolon:

	double erg = dtoa(Evaluate("a=10;b=20;c=a+b");

The following functions and operations are included in
XEvaluate:

sin cos tan       trigonometric functions
asin acos atan       inverse trigonometric functions
rad deg gon       trigonometric calculation type
pow sqr sqrt exp log log10 power, square, squareroot, exp, natural log, tenth
log
abs int fract fak cube   absolute, integer part, factional part, n!, cube
dec hex bin char     outputtype
fix           set the decimal digits
+ * /     add, sub, mul, div
% & | ^ ! ~ modulo, binary and, or, xor, not, binary not
< > <= >= == != less, greater, less or equal, greater or equal,
equal, not equal
= += -= *= /=   variable setting
@           old value (result of the last calculation)
?           help (lists all functions)
#           reset (delete all functions and variables)
          actual status (number of decimal digits,
trigonometric mode and output mode)
$           var and function list

Use the sample program to find out what’s possible with this
class.

Download demo project – 47KB

Download source – 8KB

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read