Exemple #1
0
            public static Double CalculateRPN(string rpnString, double[] values)
            {
                Stack <Double> numbersStack = new Stack <Double>();
                Double         value1, value2;
                int            pos      = 0;
                string         variable = "";

                for (int i = 0; i < rpnString.Length; i++)
                {
                    if (SignChecker.isVariable(rpnString[i]))
                    {
                        variable += rpnString[i];
                    }
                    else if (rpnString[i] == ' ')
                    {
                        if (variable != "")
                        {
                            numbersStack.Push(int.Parse(variable));
                        }
                        variable = "";
                    }
                    else
                    {
                        if (variable != "")
                        {
                            numbersStack.Push(int.Parse(variable));
                            variable = "";
                        }
                        value2 = numbersStack.Pop();
                        value1 = numbersStack.Pop();
                        numbersStack.Push(SignChecker.useOperator(rpnString[i], value1, value2));
                    }
                }
                return(numbersStack.Pop());
            }
Exemple #2
0
        //Calculating function
        public static Double CalculateRPN(string rpnString, List <string> variables, double[] values)
        {
            Stack <Double> numbersStack = new Stack <Double>(); //stack for numbers
            Double         value1, value2;                      //first and second values
            string         variable = "";                       //Current variable

            //Replaces all variables from rpn string to variables values
            for (int i = 0; i < variables.Count; i++)
            {
                rpnString = rpnString.Replace(variables[i], values[i].ToString());
            }

            for (int i = 0; i < rpnString.Length; i++)
            {
                //If current symbol is variable
                if (SignChecker.isVariable(rpnString[i]))
                {
                    //Add to variable
                    variable += rpnString[i];
                }
                else if (rpnString[i] == ' ')
                {
                    //If current symbol is space and we have something in variable
                    if (variable != "")
                    {
                        //Add variable to stack
                        numbersStack.Push(double.Parse(variable));
                    }
                    variable = "";
                }
                else if (rpnString[i] == '-' && i != rpnString.Length - 1 && SignChecker.isVariable(rpnString[i + 1]))
                {
                    variable += rpnString[i];
                }
                else
                {
                    //If variable has something
                    if (variable != "")
                    {
                        //Add to stack
                        numbersStack.Push(double.Parse(variable));
                        variable = "";
                    }
                    //Take two values from stack
                    value2 = numbersStack.Pop();
                    value1 = numbersStack.Pop();
                    //Calculate them
                    numbersStack.Push(SignChecker.useOperator(rpnString[i], value1, value2));
                }
            }
            if (variable != "")
            {
                numbersStack.Push(double.Parse(variable));
            }
            return(numbersStack.Pop());
        }