}//End of Operand class //Actual tree construction from the expression private OperandClass BuildTreeOperand() { OperandClass tree = null; string expression = AnsBox.Text; if (!char.IsNumber(expression.Last())) { expression = expression.Substring(0, expression.Length - 1); } string numberStr = string.Empty; foreach (char c in expression.ToCharArray()) { if (char.IsNumber(c) || c == '.' || numberStr == string.Empty && c == '-') { numberStr += c; } else { AddOperandToTree(ref tree, new OperandClass() { value = double.Parse(numberStr) }); numberStr = string.Empty; Operands op = Operands.MINUS; //Set default case switch (c) { case '-': op = Operands.MINUS; break; case '+': op = Operands.PLUS; break; case '/': op = Operands.DIV; break; case 'x': op = Operands.TIMES; break; } AddOperandToTree(ref tree, new OperandClass() { opp = op }); } } //Last number AddOperandToTree(ref tree, new OperandClass { value = double.Parse(numberStr) }); return(tree); }
//Display results private void Eqbtn_Click(object sender, RoutedEventArgs e) { //Qualify input if (string.IsNullOrEmpty(AnsBox.Text)) { return; } OperandClass tree = BuildTreeOperand(); double value = CalcTree(tree); AnsBox.Text = value.ToString(); }
private void AddOperandToTree(ref OperandClass tree, OperandClass elem) { if (tree == null) { tree = elem; } else { if (elem.opp < tree.opp) { OperandClass auxTree = tree; tree = elem; elem.left = auxTree; } else { AddOperandToTree(ref tree.right, elem);// recursion used to loop through operands } } }
private double CalcTree(OperandClass tree) { if (tree.left == null && tree.right == null) { return(tree.value); } else //its an operation { double subResult = 0; switch (tree.opp) { case Operands.MINUS: subResult = CalcTree(tree.left) - CalcTree(tree.right); break; case Operands.PLUS: subResult = CalcTree(tree.left) + CalcTree(tree.right); break; case Operands.DIV: subResult = CalcTree(tree.left) / CalcTree(tree.right); break; case Operands.TIMES: subResult = CalcTree(tree.left) * CalcTree(tree.right); break; } return(subResult); } }