// Проверка, является ли введенный символ цифрой
 static bool IsFigure(char SymbolToCheck)
 {
     return(FigureSigns.Contains(SymbolToCheck));
 }
示例#2
0
        // Преобразование выражения к виду обратной польской записи
        public static string TranslateExpression(string Expression)
        {
            // Стек для хранения операторов на время преобразования выражения
            Stack <string> TranslationStack = new Stack <string>();
            // Строка, содержащая преобразованное выражение
            string RPNExpression = "";

            // Пока не закончится исходное выражение
            while (Expression != "")
            {
                // Берем первый токен выражения
                string Token = GetFirstToken(Expression);
                Expression = Expression.Remove(0, Token.Length).TrimStart(' ');

                // Токен - знак операции
                if (OperationSigns.Contains(Token))

                {
                    // Элемент на вершине стека - знак операции большего или равного приоритета
                    if ((TranslationStack.Count > 0) && (OperationSigns.Contains(TranslationStack.Peek())) &&
                        (CheckPriority(Token, TranslationStack.Peek())))
                    {
                        // Выталкиваем токен с вершины в выходную строку
                        RPNExpression += TranslationStack.Pop() + " ";
                    }

                    // Помещаем токен в стек
                    TranslationStack.Push(Token);
                }

                else
                // Токен - число
                if (FigureSigns.Contains(Token[0]))
                {
                    // Добавляем токен в выходную строку
                    RPNExpression += Token + " ";
                }

                else
                // Токен - (
                if (Token == "(")
                {
                    // Помещаем токен в стек
                    TranslationStack.Push(Token);
                }
                // Токен - )
                else if (Token == ")")
                {
                    // Пока не дойдем до токена (
                    while (TranslationStack.Peek() != "(")
                    {
                        // Выталкиваем токен с вершины в выходную строку
                        RPNExpression += TranslationStack.Pop() + " ";
                    }
                    // Удаялем токен (
                    TranslationStack.Pop();
                }
            }

            // Выталкиваем из стека в выходную все оставшиеся элементы
            while (TranslationStack.Count > 0)
            {
                RPNExpression += TranslationStack.Pop() + " ";
            }

            return(RPNExpression);
        }