Обсуждение:Обратная польская запись

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску


Функции от многих переменных[править код]

В алгоритме не разобран случай функций многих переменных. Чтобы можно было разбирать выражения типа if(a, b, c).


Замечания к коду на С++

  1. Какой к черту С++, когда это - С!!!
  2. Код нерабочий (что демонстрируется разбором элементарной строки 5+3)

Убрать примеры[править код]

Я посмотрел на предлагаемые примеры и понял, что для статьи они не нужны. К тому же они совершенно без комментариев. Нужно оставить только базовый пример, который показывает суть обратной польской записи, а не примеры программ-калькуляторов на всех возможных языках программирования. --Sergei Frolov 06:13, 22 сентября 2011 (UTC)

Согласен. Эти самые калькуляторы прекрасно проживут где-нибудь в отдельной статье Викиверситета, а отсюда можно дать туда ссылочку. Если не будет возражений, перенесу. --be-nt-all 14:04, 22 сентября 2011 (UTC) Кстати, тема-то благодарная - в 2007 из этого хорошей статьи не вышло, попробую-ка я сейчас ее до звездчки дотянуть. --be-nt-all 14:14, 22 сентября 2011 (UTC)

Ошибка в сложном примере?[править код]

Как я понимаю, там ошибка, выход должен быть: 3 4 2 1 5 - 2 ^ / * + Лучше пример показать с двумя скобками 91.226.189.236 07:12, 20 сентября 2013 (UTC)

Как я понял, там нет ошибки. У вас выполнится сначала /, а потом *, а по условию у них один и тот же приоритет, значит должны выполняться в том порядке, в котором они стоят в выражении (т.е. наоборот). В конце концов, * будет вытолкнут в стек когда алгоритм дойдет до /, а не в самом конце.91.77.218.126 02:42, 8 ноября 2013 (UTC)


Как я понял, ошибка есть в другом месте - в примере работы алгоритма.

Инфиксая нотация: exp(-1/2*x)
Обратная Польская нотация: -1 2 / x * exp

В данном случае мы получим следующее: «-1 2 / x * exp» → «(-1 / 2) x * exp» → «((-1 / 2) * x) exp» → «exp((-1/2) * x)», как и показано в примере, но не равно исходному выражению.
Поскольку знак умножения имеет приоритет перед знаком деления, правильная запись выражения будет выглядеть так: «-1 2 x * / exp».

Замечание по алгоритму[править код]

Если после этого шага на вершине стека оказывается символ функции, выталкиваем его в выходную строку.

Действительно ли нужен этот шаг? Он должен дать ошибку при преобразовании такого выражения (6 символ): (1+2)+(3+4)*5. 91.77.218.126 02:46, 8 ноября 2013 (UTC)

Сейчас понял, что под функцией здесь подразумевается функция одной переменной. Тогда логично.91.77.197.66 03:13, 10 ноября 2013 (UTC)

Запись или нотация[править код]

См. Википедия:К переименованию/18 июня 2018#Польская нотация → Польская записьАлексей Копылов 20:46, 18 июня 2018 (UTC)