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); } }
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()); }
static void Main(string[] args) { IRPNCalculator calc = (IRPNCalculator) new RPNCalculator(); calc.Push(10); calc.Push(20); calc.Add(); Console.WriteLine(calc.Pop()); }
public void Execute(IRPNCalculator calc) { // Выталкнуть все операции до открывающей скобки в выходную строку while (calc.RPNStack.Peek() != '(') { calc.RPNResult += calc.RPNStack.Pop(); } // Удаляет открывающую скобку calc.RPNStack.Pop(); }
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); }
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); } }
public void Execute(IRPNCalculator calc) { calc.RPNStack.Push(Symbol); }
public virtual void Execute(IRPNCalculator irpnCalculator) { PutOperation(irpnCalculator); }