Префиксная и постфиксная форма записи примеры

Префиксная и постфиксная форма записи примеры

Префиксы «пре», «пост» и «ин» относятся к относительной позиции оператора по отношению к операндам. В префиксной записи операция предшествует операндам, в постфиксной следует за операндами, а в инфиксной записи операция разделяет два операнда.

Вычисление выражения А + В * С, записанное в стандартной инфиксной записи, требует знания того, какая из двух операций выполняется первой. В случае + и * мы знаем, что умножение выполняется раньше сложения (при отсутствии скобок). Следовательно, выражение А + В * С интерпретируется как А + (В * С). Говорят, что умножение имеет более высокий приоритет, чем сложение.

Предположим, что мы хотим записать выражение А + В * С в постфиксной записи. Учитывая правила приоритетности операций, мы сначала преобразуем часть выражения, которая вычисляется первой – умножение. Выполняя преобразование поэтапно, получим

А + (В * С) – скобки для выделения

А + (В С *) – преобразование операции умножения

А (В С *) + – преобразование операции сложения

А В С * + – постфиксная форма

Единственным правилом, используемым в процессе преобразования, является то, что операции с более высоким приоритетом преобразуются первыми, а после того, как операция преобразована к постфиксной форме, она рассматривается как один единый операнд. Рассмотрим теперь тот же пример, но приоритет выполнения операций изменим при помощи скобок:

(А + В) * С – инфиксная форма

(А В +) * С – преобразование операции сложения

(А В +) С * – преобразование операции умножения

А В + С * – постфиксная форма

Правила приоритетности для преобразования из инфиксной в префиксную форму аналогичны. Единственное отличие от постфиксного преобразования состоит в том, что операция помещается перед операндами, а не после них.

Примеры выражений в инфиксной, постфиксной и префиксной формах:

Читайте также:  Звездные войны дроид bb 8

Об обратной польской нотации(записи) на Хабре уже рассказывали . Как известно вся сила ОПН в постфиксной записи математического выражения. О том как преобразовать привычную для нас инфиксную запись в постфиксную детально рассмотрено в статье выше, на Википедии и даже приведена реализация на Ассемблере. Но вот о том как провернуть обратное действие я статей не нашел.

Наверно, первый вопрос который вы зададите: «А зачем это нужно?». А представьте, что мы оптимизируем вводимое пользователем выражение и результат нам надо показать в инфиксной записи, а оптимизировать мы будем, конечно, с помощью ОПН.

Ну, теперь ближе к делу:

Словесное описание алгоритма:
  1. Если читаем число, то заносим его в стек
  2. Если читаем знак операции, то:
    • Берем 2 верхних элемента стека
    • Если в первом элементе приоритет операции меньше(и не равен 0), чем у рассматриваем операции, то берем первый элемент в скобки
    • Аналогично для 2-го элемента
    • Записываем в стек строку вида: 2-й элемент + знак операции + 1-й элемент
    • Если строка полностью пройдена, то результатом является значение вершины стека
    Реализация на С++
    Пример работы

    Для примера возьмем преобразованное выражение из примера в статье с хабра:

    БлогNot. Инфиксная, префиксная и постфиксная формы записи выражений

    Инфиксная, префиксная и постфиксная формы записи выражений

    Для записи выражений при их программном оценивании часто используются не только привычная нам запись вида (A+B)/(C*D)-E/F , называемая инфиксной, но и постфиксная (была у меня когда-то в МК-61), и префиксная формы записи выражений.

    Ниже показан простой конвертер выражения, записанного в постфиксной форме, в префиксную и инфиксную формы. Предполагается, что выражение в постфиксной форме корректно и состоит только их однобуквенных латинских операндов (переменных) A..Z и 4 знаков арифметических действий.

    Читайте также:  Что такое локальная инвентаризация

    Для работы применяется стандартный стек, программка проверена в консоли Visual Studio 2015, на примере из "Вики" сработала 🙂

    28.02.2018, 14:19; рейтинг: 2360

    Ссылка на основную публикацию
    Прерывается соединение с сервером
    У некоторых игроков иногда возникают проблемы с соединением в сражениях, но при этом скорость интернет-провайдера не нарушена. Проблема зачастую решается...
    Почему не работает видео на планшете
    Достаточно распространенная проблема пользователей планшетов и телефонов на Google Android — невозможность просмотра видео онлайн, а также загруженных на телефон...
    Почему не работает звук на телевизоре самсунг
    Последние вопросы Рома Телевизоры Samsung LE40D550K1WXRU пропал звук на телевизоре Samsung LE40D550K1WXRU. смотрел в настройках результатов не дало Проверьте настройки:...
    Префиксная и постфиксная форма записи примеры
    Префиксы «пре», «пост» и «ин» относятся к относительной позиции оператора по отношению к операндам. В префиксной записи операция предшествует операндам,...
    Adblock detector