Лексический анализ выражений. Формы записи выражений - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д