Вычислить значение произвольного выражения, представленного в обратной польской записи - 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]);
Объяснение кода листинга программы
В этом коде реализована обработка выражений в обратной польской записи. Вот список действий, которые происходят в коде:
- Объявляются переменные:
stek
- буфер для стека выражения,ns
- счетчик стека,res
- результат вычисления выражения,Expr
- строка с обратной польской записью выражения,val
- массив значений переменных.
- В цикле перебираются символы выражения:
- Если текущий символ
*
или+
, то выполняется вычисление скопированных в стек двух предыдущих значений с использованием операции сложения (+
) или умножения (*
). - Если текущий символ не является оператором (
*
,+
), то он помещается в стек.
- Если текущий символ
- Если выражение некорректно (например, если встречен недопустимый символ), то выводится сообщение об ошибке.
- Выводится результат вычисления выражения. Обратите внимание, что этот код не проверяет переполнение при вычислении выражения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д