static void Main(string[] args) { ReversePolishNotation rpn = new ReversePolishNotation(); RCalculator MyCalc = new RCalculator(new List <IOperation>() { new Addition(), new Substraction(), new Multiplication(), new Division() }); string inputString = Console.ReadLine(); /* Проверка выражения на верную структуру */ if (Regex.IsMatch(inputString, @"[^()0-9*/+-]|[*/+-]{2,}|\A[*/+-]|[*/+-]\z")) { Console.WriteLine("Invalid input"); Environment.Exit(-1); } rpn.Parse(inputString); List <string> parsedExpression = rpn.RpnExpression; List <string> executionList = new List <string>(); float leftOp = 0; float rightOp = 0; float result = 0; string operation = ""; foreach (var item in parsedExpression) { if (!float.TryParse(item, out _)) //Если item не парсится во float, то item это символ операции { leftOp = float.Parse(executionList[^ 2]);
/// <summary> /// Calculates each of B0, B1, r, r^2, and P given input E, x, and y. Compares the calculated output with the /// expected output. /// </summary> /// <param name="B0">expected B0</param> /// <param name="B1">expected B1</param> /// <param name="r">expected r</param> /// <param name="rSquared">expected r^2</param> /// <param name="P">expected P</param> /// <param name="E">estimated proxy size</param> /// <param name="x">list of x axis <c>double</c> data</param> /// <param name="y">list of y axis <c>double</c> data</param> private void CalculateAndVerify(double B0, double B1, double r, double rSquared, double P, double E, List <double> x, List <double> y) { double calculatedB1 = B1Calculator.Calculate(x, y); double calculatedB0 = B0Calculator.Calculate(x, y, calculatedB1); double calculatedR = RCalculator.Calculate(x, y); double calculatedRSquared = RSquaredCalculator.Calculate(calculatedR); double calculatedP = PCalculator.Calculate(calculatedB0, calculatedB1, E); Assert.True(Math.Round(calculatedB0, 2).Equals(Math.Round(B0, 2))); Assert.True(Math.Round(calculatedB1, 2).Equals(Math.Round(B1, 2))); Assert.True(Math.Round(calculatedR, 2).Equals(Math.Round(r, 2))); Assert.True(Math.Round(calculatedRSquared, 2).Equals(Math.Round(rSquared, 2))); Assert.True(Math.Round(calculatedP, 2).Equals(Math.Round(P, 2))); }