private void btnCalculate_Click(object sender, EventArgs e) { try { var input = txtMessage.Text; var equation = EquationHelper.RemoveWhitespace(input); if (EquationValidator.IsEquationValid(equation)) { var result = EquationTreeGenerator.Calculation(equation).getValue(); txtMessage.Text = result.ToString(); lblMessage.Text = "Enter another equation"; } else { lblMessage.Text = "Invalid Equation! Please try again"; } } catch (InvalidEquationException ex) { lblMessage.Text = ex.Message; } }
public static bool IsEquationValid(string _input) { if (string.IsNullOrEmpty(_input)) { return(false); } var hasInvalidCharacter = _input.Any(_character => !(EquationHelper.IsCharacterNumber(_character) || EquationHelper.IsCharacterOperator(_character) || (EquationHelper.IsBracketsValid(_input, EquationHelper.IsCharacterBracket(_character)) && EquationHelper.IsCharacterBracket(_character)))); if (hasInvalidCharacter) { return(false); } if (EquationHelper.IsNumberMultipleDecimal(_input)) { return(false); } if (EquationHelper.IsLastCharacterAOperator(_input)) { return(false); } if (EquationHelper.IsOperatorDuplicated(_input)) { return(false); } return(true); }
public double CalculateEquation(string equation) { var numberCharacterBuilder = new StringBuilder(); var numbers = new List <int>(); var operators = new List <char>(); double result = 0; int counter = 0; var Operation = new OperatorFactory(); calcManager = new CalculationManager(); var updatedPreviousResult = 0; var updatedCurrentValue = 0; foreach (var character in equation) { if (EquationHelper.IsCharacterNumber(character)) { numberCharacterBuilder.Append(character); } else { if (NumbersListValidator.IsListEmpty(numbers)) { updatedPreviousResult = UpdateCalcManagerPrevious(numbers, numberCharacterBuilder.ToString()); numberCharacterBuilder.Clear(); } else { updatedCurrentValue = UpdateCalcManagerCurrent(numbers, numberCharacterBuilder.ToString()); numberCharacterBuilder.Clear(); var NextOperation = Operation.GetOperator(operators[counter - 1]); result = NextOperation.DoMaths(updatedPreviousResult, updatedCurrentValue); updatedPreviousResult = UpdateCalcManagerPrevious(numbers, result.ToString()); } counter++; operators.Add(character); } } updatedCurrentValue = UpdateCalcManagerCurrent(numbers, numberCharacterBuilder.ToString()); var LastOperation = Operation.GetOperator(operators[operators.Count() - 1]); result = LastOperation.DoMaths(updatedPreviousResult, updatedCurrentValue); return(result); }
public static IEquationNode Calculation(string equation) { if (EquationHelper.IsWholeEquationWithinBrackets(equation) && EquationHelper.EquationContainsAnUnbracketedOperator(equation)) { return(Calculation(equation.Substring(1, equation.Length - 2))); } if (EquationHelper.IsStringNumber(equation)) { return(new Number(equation)); } foreach (var op in EquationHelper.orderedOperators) { var bracketCounter = 0; for (int i = 0; i < equation.Length; i++) { if (equation[i] == '(') { bracketCounter++; } else if (equation[i] == ')') { bracketCounter--; } if (equation[i] == op && bracketCounter == 0) { return(new EquationNode( equation.Substring(0, i), equation.Substring(i + 1), Operation.GetOperator(equation[i]))); } } } throw new InvalidEquationException("Equation is Invalid!"); }