Ejemplo n.º 1
0
        public void SimpleTest()
        {
            var rpn = new ConverterRPN();

            Assert.AreEqual("X 3 Y * +", rpn.ConvertToRPN("X+3*Y"));
            Assert.AreEqual("X 3 + Y *", rpn.ConvertToRPN("(X+3)*Y"));
            Assert.AreEqual("Ошибка. Неизвестная команда", rpn.GetResult());
            Assert.AreEqual("1 2 +", rpn.ConvertToRPN("1+2"));
            Assert.AreEqual("3", rpn.GetResult());
            Assert.AreEqual("45 sin", rpn.ConvertToRPN("sin(45)"));
            Assert.AreEqual("0,850903524534118", rpn.GetResult());
        }
Ejemplo n.º 2
0
        public void FunctionTest()
        {
            var rpn = new ConverterRPN();

            Assert.AreEqual("1 2 / x * exp", rpn.ConvertToRPN("exp(1/2*x)"));
            Assert.AreEqual("30 cos 45 sin +", rpn.ConvertToRPN("cos(30)+sin(45)"));
            Assert.AreEqual("1,0051549744217", rpn.GetResult());
            Assert.AreEqual("26 ln 3 exp *", rpn.ConvertToRPN("ln(26)*exp(3)"));
            Assert.AreEqual("65,4406183137404", rpn.GetResult());
            Assert.AreEqual("x 26 ln ^ 34 exp *", rpn.ConvertToRPN("x^ln(26)*exp(34)"));
            Assert.AreEqual("Ошибка. Неизвестная команда", rpn.GetResult());
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("\nДля начала работы программы введите 1." +
                                  "\nЕсли вы хотите посмотреть справочную информацию о программе, введите 2" + "\nЗавершить работу - введите 0");
                string input;

                while (true)
                {
                    input = Console.ReadLine();
                    if (input == "1" || input == "2" || input == "0")
                    {
                        break;
                    }
                    Console.WriteLine("Неверное значение");
                }
                if (input == "1")
                {
                    Console.WriteLine("Введите формулу для конвертации в обратную польскую нотацию без пробелов! Для отмены ввода введите 'quit'");
                    var formula = Console.ReadLine();

                    var rpn = new ConverterRPN();
                    if (formula == null || formula == "quit" || formula == "")
                    {
                        Console.WriteLine("Данные не введены");
                    }
                    else
                    {
                        var res    = rpn.ConvertToRPN(formula);
                        var number = rpn.GetResult();
                        Console.WriteLine("Формула: " + res);
                        Console.WriteLine("Результат: " + number);
                    }
                }
                else if (input == "0")
                {
                    break;
                }

                else if (input == "2")
                {
                    Console.WriteLine("--------------------");
                    Console.WriteLine("Справка:");
                    Console.WriteLine("\tПосле старта работы программы необходимо ввести формулу для конвертации в обратную польскую нотацию БЕЗ ПРОБЕЛОВ." +
                                      "\nПосле этого необходимо нажать enter. Далее появится результат работы алгоритма." +
                                      " Программа поддерживает наличие круглых скобок, наличие переменных, следующие функции exp, sqrt, abs, sin, cos, tg, ctg, arctg, arcctg, arcsin, arccos, ln, lg;" +
                                      " и следующие арифметические операции +,  -,  *,  /,  ^(возведение в степень)."
                                      );
                    Console.WriteLine("--------------------");
                }
            }
        }
Ejemplo n.º 4
0
        public void HardExpressionTest()
        {
            var rpn = new ConverterRPN();

            Assert.AreEqual("6 10 + 4 - 1 1 2 * + / 1 +", rpn.ConvertToRPN("(6+10-4)/(1+1*2)+1"));
            Assert.AreEqual("5", rpn.GetResult());
            Assert.AreEqual("2 3 5 + * 6 7 + 8 9 - / -", rpn.ConvertToRPN("2*(3+5)-(6+7)/(8-9)"));
            Assert.AreEqual("29", rpn.GetResult());
            Assert.AreEqual("x y ^ 5 z * / 10 +", rpn.ConvertToRPN("x^y/(5*z)+10"));
            Assert.AreEqual("Ошибка. Неизвестная команда", rpn.GetResult());
            Assert.AreEqual("48 ln 32 Y - 3 Y * 33 + / +", rpn.ConvertToRPN("ln(48)+(32-Y)/(3*Y+33)"));
            Assert.AreEqual("Ошибка. Неизвестная команда", rpn.GetResult());
        }
Ejemplo n.º 5
0
        public void OperatorsTest()
        {
            var rpn = new ConverterRPN();

            Assert.AreEqual("2 3 + 4 *", rpn.ConvertToRPN("(2+3)*4"));
            Assert.AreEqual("20", rpn.GetResult());
            Assert.AreEqual("7 2 3 * -", rpn.ConvertToRPN("7-2*3"));
            Assert.AreEqual("1", rpn.GetResult());
            Assert.AreEqual("123 X Y + * Z *", rpn.ConvertToRPN("123*(X+Y)*Z"));
            Assert.AreEqual("Ошибка. Неизвестная команда", rpn.GetResult());
            Assert.AreEqual("3 4 2 * 1 5 - 2 ^ / +", rpn.ConvertToRPN("3+4*2/(1-5)^2"));
            Assert.AreEqual("3,5", rpn.GetResult());
        }