Beispiel #1
0
        public string[] ConvertToPostfixNotation(string input)
        {
            List<string> operators = new List<string>(standart_operators);
            List<string> outputSeparated = new List<string>();
            Stack<string> stack = new Stack<string>();
            foreach (string c in Separate(input))
            {
                if (operators.Contains(c))
                {
                    if (stack.Count > 0 && !c.Equals("("))
                    {
                        if (c.Equals(")"))
                        {
                            string s = stack.Pop();
                            while (!s.Equals("("))
                            {
                                outputSeparated.Add(s);
                                s = stack.Pop();
                            }
                        }
                        else if (GetPriority(c) > GetPriority(stack.Peek()))
                            stack.Push(c);
                        else
                        {
                            while (stack.Count > 0 && GetPriority(c) <= GetPriority(stack.Peek()))
                                outputSeparated.Add(stack.Pop());
                            stack.Push(c);
                        }
                    }
                    else
                        stack.Push(c);
                }
                else
                    outputSeparated.Add(c);
            }
            if (stack.Count > 0)
                foreach (string c in stack)
                    outputSeparated.Add(c);

            return outputSeparated.ToArray();
        }
Beispiel #2
0
		protected double[] PrepareParameterValueList ()
		{
			Debug.Assert (mIsInitialized, 
				"Calling PrepareParameters on a non-initialized formula on component " 
				+ Error.Hierarchy(mParent.GetComponent()));
			List<double> parameterValueList = new List<double> ();

			foreach (Parameter p in mParameters.Values) {
				parameterValueList.Add (p.bindedValue.GetValue ());
			}


			return parameterValueList.ToArray ();
		}
        public static string[] ConvertToReversePolishNotation(string input)
        {
            var output = new List<string>();
            var stack = new MyStack<string>();
            int startOfNum = 1;
            bool isNumStarted = false;
            int counter = 0;
            int lnth = 0;
            int opBrackets = 0;
            int clBrackets = 0;
            foreach (var i in input)
            {
                switch (i)
                {
                    case '(':
                        opBrackets++; break;
                    case ')':
                        clBrackets++; break;
                }
            }
            if (opBrackets != clBrackets)
            {
                throw new InvalidOperationException("Brackets error");
            }
            bool prevOperator = false;
            foreach (var i in input)
            {

                if (Char.IsDigit(i) && !isNumStarted)
                {
                    prevOperator = false;
                    isNumStarted = true;
                    startOfNum = counter;
                    lnth++;
                }

                if (!Char.IsDigit(i) && isNumStarted)
                {
                    string number = input.Substring(startOfNum, lnth - 1);
                    output.Add(number);
                    isNumStarted = false;
                    lnth = 0;
                }

                if (Char.IsDigit(i) && isNumStarted)
                {
                    lnth++;
                }

                if (counter == input.Length - 1 && isNumStarted)
                {
                    string number = input.Substring(startOfNum, lnth - 1);
                    output.Add(number);
                    isNumStarted = false;
                    lnth = 0;
                }
                if (Operators.Contains(i.ToString()))
                {

                    if (i.ToString() == "(")
                    {
                        prevOperator = false;
                        stack.Push(i.ToString());

                    }

                    if (i.ToString() == ")")
                    {
                        prevOperator = false;
                        while (stack.Top.Object != "(")
                        {
                            output.Add(stack.Pop());
                            if (stack.Top == null) continue;
                        }
                    }

                    if (i.ToString() == "+" || i.ToString() == "/" || i.ToString() == "*" || i.ToString() == "-")
                    {
                        if (prevOperator)
                        {
                            throw new InvalidOperationException("Error");
                        }
                        if (stack.Top != null)
                        {
                            if (GetPriority(i.ToString()) > GetPriority(stack.Top.Object))
                            {
                                /*output.Add(i.ToString());
                                output.Add(stack.Pop());*/
                                stack.Push(i.ToString());
                            }
                            else
                            {
                                stack.Push(i.ToString());
                            }

                        }
                        else
                        {
                            stack.Push(i.ToString());
                        }
                        prevOperator = true;
                    }
                }
                if (counter == input.Length - 1)
                {
                    while (stack.Top != null)
                    {
                        if (stack.Top.Object == "(" || stack.Top.Object == ")")
                        {
                            stack.Pop();
                        }
                        else
                        {
                            output.Add(stack.Pop());
                        }

                    }
                }
                counter++;

            }
            return output.ToArray();
        }