Лексический анализ выражений. Формы записи выражений - C# (210700)

Узнай цену своей работы

Формулировка задачи:

Уважаемые программисты помогите пожалуйста с заданием!!!!!!!!! Задание: Написать программу, представляющую математические выражения в форме обратной польской записи. Используя полученную бесскобочную форму записи выражения рассчитать его R=a/b-((c+d)*e) a=1.2 b=0.7 c=9.3 d=6.5 e=8.4 R=-131.006 Заранее огромное спасибо вам!!!!!

Решение задачи: «Лексический анализ выражений. Формы записи выражений»

textual
Листинг программы
static private string GetExp(string str) //Метод принимает строку - выражение, и возвращает его вид в ОПН
{
    string outString = "";
    Stack<char> operStack = new Stack<char>();
 
    for (int i = 0; i < str.Length; i++)
    {
        if (str[i] == ' ') //Если пробел
            continue; //пропускаем
 
        if (Char.IsDigit(str[i])) //Если число
        {
            while (!IsDelimetr(str[i])) //Пока не разделитель
            {
                outString += str[i]; //Добаляем
                i++;
                if (i == str.Length) break;
            }
            outString += " ";
            i--;
            continue;
        }
 
        if (IsOperator(str[i]))
        {
            if (operStack.Count > 0)
                if (GetPriority(str[i]) <= GetPriority(operStack.Peek()))
                    outString += operStack.Pop().ToString() + " ";
 
            operStack.Push(char.Parse(str[i].ToString()));
        }
 
        if (str[i] == '(')
            operStack.Push(str[i]);
 
        if (str[i] == ')')
        {
            char s = operStack.Pop();
 
            while (s != '(')
            {
                outString += s.ToString() + ' ';
                s = operStack.Pop();
            }
        }
    }
 
    while (operStack.Count > 0)
    outString += operStack.Pop() + " ";
 
        return outString;
}

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы