Перевод арифметических выражений в Обратную Польскую Запись (ОПЗ)

Апрель 23, 2009 / Автор AlexR / Рубрики Программирование / Ответ

Преобразование выражения в ОПЗ с использованием стека

Нам понадобится стек для переменных типа char, т.к. исходное выражение мы получаем в виде строки. Рассматриваем поочередно каждый символ:

1. Операнд (число, идентификатор) сразу помещаем в ОПЗ.

2. «(» знак открывающейся скобки сразу помещаем в стек.

3. Арифметические операторы «+», «-», «*», «/», то тут уже требуется выталкивать из стека операторы  ОПЗ до тех пор, пока приоритет текущего будет выше, либо равен приоритету оператора, который находится на вершине стека.

4. «)» знак закрывающейся скобки. В этом случае выталкиваются все арифметические операции до первой открывающейся скобки включительно, при этом открывающаяся скобка в ОПЗ не идет, равносильно закрывающейся.

5. Когда все эти операции проделаны (или встретился конец выражения), если стек не пустой, то из него извлекаются все арифметические операции, пока он таковым не окажется.

Под словом приоритет арифметических выражений имеется ввиду порядок его действия. Например у скобки приоритет равен 0, у сложения и вычитания — 1, а у умножения и деления — 2.

В текущей программе возможен ввод символа степени «^».

Программа написана в PascalABC 3.0, но проверялась и на простом Turbo Pascal. Проблем не было.

Ссылка для скачивания: Перевод арифметического выражения в ОПЗ
Вернуться назад

Комментарии (2) к “Перевод арифметических выражений в Обратную Польскую Запись (ОПЗ)”

Комментарии

  1. Vit (http://soft-buy.ru/)

    Ссылка на файл битая, перезалейте пожалуйста

  2. Дим[{a

    Спасибо огромное создателю прога супер)

Ответ