public void ConvertShouldConvertToReversePolishNotation() { var input = new[] // 3 + 4 * 2 / (1 - 5)^2 { InputCell.Number(3), InputCell.Symbol("+"), InputCell.Number(4), InputCell.Symbol("*"), InputCell.Number(2), InputCell.Symbol("/"), InputCell.Symbol("("), InputCell.Number(1), InputCell.Symbol("-"), InputCell.Number(5), InputCell.Symbol(")"), InputCell.Symbol("^"), InputCell.Number(2), }; var result = new RpnConverter(new InputChecker()).Convert(input); // 3 4 2 * 1 5 - 2 ^ / + Assert.AreEqual(3, result[0].Value); Assert.AreEqual(4, result[1].Value); Assert.AreEqual(2, result[2].Value); Assert.AreEqual("*", result[3].Value); Assert.AreEqual(1, result[4].Value); Assert.AreEqual(5, result[5].Value); Assert.AreEqual("-", result[6].Value); Assert.AreEqual(2, result[7].Value); Assert.AreEqual("^", result[8].Value); Assert.AreEqual("/", result[9].Value); Assert.AreEqual("+", result[10].Value); }
static void Main(string[] args) { var parser = new InputParser(); var checker = new InputChecker(); var converter = new RpnConverter(checker); var counter = new RpnCounter(); var calculator = new RpnCalculator(parser, converter, counter); Console.WriteLine("CONSOLE CALCULATOR"); Console.WriteLine("You can enter numbers and symbols + - * / ^ ( )."); Console.WriteLine("Press enter key to calculate."); Console.WriteLine("Enter 'q' key to exit."); while (true) { Console.Write("Enter expression > "); string input = Console.ReadLine(); if ("q".Equals(input, StringComparison.OrdinalIgnoreCase)) { break; } try { double result = calculator.Calculate(input); Console.WriteLine($"Result is {result}"); } catch (Exception) { Console.WriteLine("Incorrect input"); } } }
public RpnCalculator(InputParser parser, RpnConverter converter, RpnCounter counter) { _parser = parser; _converter = converter; _counter = counter; }