Вычислить значение произвольного выражения, представленного в обратной польской записи - C (СИ) (149115)

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

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

Вычислить значение произвольного выражения, представленного в обратной польской записи. Например: обычная запись: (b+c)*d обратная польская запись: bc+d* Указания Просматривая строку, анализировать очередной символ. Если это операнд, то записать его в стек; если это операция, то извлечь два элемента из стека, выполнить математическую операцию и занести результат в стек.

Решение задачи: «Вычислить значение произвольного выражения, представленного в обратной польской записи»

textual
Листинг программы
char stek[1000];
int ns = 0, res=0;
char Expr[] = "bc+d*";
int val[26];  // массив значений переменных a = val[0], b=val[1] ...
char *p;
for(p=Expr; *p; p++) {
  if (*p=='*' || *p=='+') {
    if (ns < 2)  break;
    if (*p=='+') stek[ns-2] = [stek[ns-1] + stek[ns-2];
    else  stek[ns-2] = stek[ns-1] * stek[ns-2];
    ns--;
  }
  else {
    if (*p <'a' || *p>'z') break;
    stek[ns++] = val[*p];
  }
}
if (*p || ns !=1) printf("Error");
else printf("res=%d", stek[0]);

Объяснение кода листинга программы

В этом коде реализована обработка выражений в обратной польской записи. Вот список действий, которые происходят в коде:

  1. Объявляются переменные:
    • stek - буфер для стека выражения,
    • ns - счетчик стека,
    • res - результат вычисления выражения,
    • Expr - строка с обратной польской записью выражения,
    • val - массив значений переменных.
  2. В цикле перебираются символы выражения:
    • Если текущий символ * или +, то выполняется вычисление скопированных в стек двух предыдущих значений с использованием операции сложения (+) или умножения (*).
    • Если текущий символ не является оператором (*, +), то он помещается в стек.
  3. Если выражение некорректно (например, если встречен недопустимый символ), то выводится сообщение об ошибке.
  4. Выводится результат вычисления выражения. Обратите внимание, что этот код не проверяет переполнение при вычислении выражения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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