public override double Execute() { switch (index) { case 1: return(Math.Cos(right.Execute())); case 2: return(Math.Sin(right.Execute())); case 3: return(Math.Asin(right.Execute())); case 4: return(Math.Acos(right.Execute())); case 5: return(Math.Sqrt(right.Execute())); case 6: return(left.Execute() + right.Execute()); case 7: return(left.Execute() - right.Execute()); case 8: return(left.Execute() * right.Execute()); case 9: return(left.Execute() / right.Execute()); case 10: return(Math.Pow(left.Execute(), right.Execute())); case 11: return(-1 * right.Execute()); case 12: return(Math.Abs(right.Execute())); case 13: return(x); case 14: return(Math.E); case 15: return(Math.PI); default: throw new Exception("Not Assigned Formula was executed"); } }
//in constructor we get the text of neccessary formula //parse it and form the binary tree of calculating order //and we do it just once, that let to mitigate the count of computing for each X when Charting public double Execute(double argument) { Operation.x = argument; return(root.Execute()); }