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);
        }
Exemple #2
0
        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;
 }