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()); }
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()); }
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("--------------------"); } } }
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()); }
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()); }