Algorithm to partition a complex equation into 2 master equations

Join the discussion
Registration is free. Start your own thread to ask a follow-up.
4 replies · 2K views · last reply
Jamin2112
Messages
973
Reaction score
12
My Calculus tool is coming along. The only thing left is to write some it's helper functions, such as the one described below:

Code:
void CalculusWizard::partitionEquation(const std::string & eq, std::string & eq1, std::string & eq2, CalcWizConsts::eqOps & oper)
{
	/* Given an equation eq, partion eq into 
	   eq = eq1 oper eq2
	   where oper is the operator with the lowest precedence, 
	   e.g. eq = "x*sin(x)+x^2" --> eq1 = "x*sin(x)", oper = ADDITION, eq2 = "x^2".
	   If there is no operator, e.g. eq = "x", then oper = NONE.
	*/
}

which uses

Code:
enum eqOps { ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION, COMPOSITION, NONE };

defined in

Code:
namespace CalcWizConsts.

Does anyone have advice for how I should start out on this function? Or is there any resource you could direct me to where I could learn this type of thing?
 
Physics news on Phys.org
Welcome to the fascinating world of parsers and lexical analysers.

What should your function do if the equation looks like x + x + x?
 
voko said:
Welcome to the fascinating world of parsers and lexical analysers.

What should your function do if the equation looks like x + x + x?

In that case,

eq1 = x,
eq2 = x + x
 
Jamin2112 said:
In that case,

eq1 = x,
eq2 = x + x

+ is too easy, because it is associative. Be careful when you have x - y - z.

I think in your notation eq2 would then become y ##+## z. Or better, eq1 should have been x - y.