Ejemplo n.º 1
0
        static private void AddStack(ref StackOfDouble top, double data)
        {
            StackOfDouble stack = new StackOfDouble();

            stack.data = data;
            if (top == null)
            {
                stack.next = null;
                top        = stack;
            }
            else
            {
                stack.next = top;
                top        = stack;
            }
        }
Ejemplo n.º 2
0
        static public double ReverseOutPolishNotation(string str)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            StackOfDouble top = null;
            string        buffer;

            while (str != "")
            {
                buffer = MathExpression.GetMemberOfExpression(ref str);
                if (buffer != "+" && buffer != "-" && buffer != "*" && buffer != "/" && buffer != "^")
                {
                    double data = Convert.ToDouble(buffer);
                    AddStack(ref top, data);
                }
                else
                {
                    if (buffer == "+")
                    {
                        double num1, num2;
                        num1 = top.data;
                        top  = top.next;
                        num2 = top.data;
                        top  = top.next;
                        AddStack(ref top, num2 + num1);
                    }
                    else if (buffer == "-")
                    {
                        double num1, num2;
                        num1 = top.data;
                        top  = top.next;
                        num2 = top.data;
                        top  = top.next;
                        AddStack(ref top, num2 - num1);
                    }
                    else if (buffer == "*")
                    {
                        double num1, num2;
                        num1 = top.data;
                        top  = top.next;
                        num2 = top.data;
                        top  = top.next;
                        AddStack(ref top, num2 * num1);
                    }
                    else if (buffer == "/")
                    {
                        double num1, num2;
                        num1 = top.data;
                        top  = top.next;
                        num2 = top.data;
                        top  = top.next;
                        AddStack(ref top, num2 / num1);
                    }
                    else if (buffer == "^")
                    {
                        double num1, num2;
                        num1 = top.data;
                        top  = top.next;
                        num2 = top.data;
                        top  = top.next;
                        AddStack(ref top, Math.Pow(num2, num1));
                    }
                }
            }
            return(top.data);
        }