Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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!");
        }