Лексический анализ выражений. Формы записи выражений - 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;
}