Esempio n. 1
0
        protected void PutOperation(IRPNCalculator calc)
        {
            if (calc.IsCalculating)
            {
                return;
            }

            var stack = calc.RPNStack;

            if (stack.Count == 0)
            {
                stack.Push(Symbol);
                return;
            }
            var currentOperation = calc.Operations[stack.Peek()];

            if (currentOperation == null)
            {
                return;
            }
            if (currentOperation.Priority < Priority)
            {
                stack.Push(Symbol);
            }
            else
            {
                for (var op = calc.Operations[stack.Peek()]; stack.Count > 0 && op != null && op.Priority >= Priority; calc.RPNResult += stack.Pop())
                {
                    ;
                }
                stack.Push(Symbol);
            }
        }
Esempio n. 2
0
 public override void Execute(IRPNCalculator calc)
 {
     base.Execute(calc);
     if (calc == null || calc.CalcStack.Count < 2)
     {
         return;
     }
     calc.CalcStack.Push(calc.CalcStack.Pop() * calc.CalcStack.Pop());
 }
Esempio n. 3
0
        static void Main(string[] args)
        {
            IRPNCalculator calc = (IRPNCalculator) new RPNCalculator();

            calc.Push(10);
            calc.Push(20);
            calc.Add();
            Console.WriteLine(calc.Pop());
        }
Esempio n. 4
0
 public void Execute(IRPNCalculator calc)
 {
     // Выталкнуть все операции до открывающей скобки в выходную строку
     while (calc.RPNStack.Peek() != '(')
     {
         calc.RPNResult += calc.RPNStack.Pop();
     }
     // Удаляет открывающую скобку
     calc.RPNStack.Pop();
 }
Esempio n. 5
0
        public override void Execute(IRPNCalculator calc)
        {
            base.Execute(calc);
            if (calc == null || calc.CalcStack.Count < 2)
            {
                return;
            }
            var val = calc.CalcStack.Pop() + calc.CalcStack.Pop();

            calc.CalcStack.Push(val);
        }
Esempio n. 6
0
        public override void Execute(IRPNCalculator calc)
        {
            base.Execute(calc);
            if (calc == null || calc.CalcStack.Count < 2)
            {
                return;
            }
            var val1 = calc.CalcStack.Pop();
            var val2 = calc.CalcStack.Pop();

            if (val1 == 0)
            {
                calc.CalcStack.Push(0);
            }
            else
            {
                calc.CalcStack.Push(val2 / val1);
            }
        }
Esempio n. 7
0
 public void Execute(IRPNCalculator calc)
 {
     calc.RPNStack.Push(Symbol);
 }
Esempio n. 8
0
 public virtual void Execute(IRPNCalculator irpnCalculator)
 {
     PutOperation(irpnCalculator);
 }