Beispiel #1
0
        private double Calculate(IEnumerable <ContentElement> input)
        {
            Stack <ContentElement> stack        = new Stack <ContentElement>();
            Queue <ContentElement> queue        = new Queue <ContentElement>(ConvertToPostfixNotation(input));
            ContentElement         firstInQuene = queue.Dequeue();
            double returnValue = 0;
            double summ;

            if (queue.Count == 0)
            {
                if (firstInQuene.IsIndex())
                {
                    returnValue = DigitValue(new CellIndex(firstInQuene.Text()));
                }
                else
                {
                    returnValue = firstInQuene.Value();
                }
            }
            else
            {
                while (queue.Count >= 0)
                {
                    if (!firstInQuene.IsOperators())
                    {
                        stack.Push(firstInQuene);
                        firstInQuene = queue.Dequeue();
                    }
                    else
                    {
                        ContentElement firstEl  = stack.Pop();
                        ContentElement secondEl = stack.Pop();
                        summ = MathOp(firstEl, secondEl, firstInQuene);

                        stack.Push(new DigitElement(summ.ToString()));
                        if (queue.Count > 0)
                        {
                            firstInQuene = queue.Dequeue();
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                returnValue = stack.Pop().Value();
            }
            return(returnValue);
        }