Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 20:19   #1
azl-8
Новичок
Джуниор
 
Регистрация: 22.03.2009
Сообщений: 2
По умолчанию Польская запись

Здравствуйте! Мне нужно составить блок-схему алгоритма вычисления арифметических выражений в польской записи. Данный алгоритм имеет следующий вид:
В основе алгоритма получения польской записи лежит следующая схема:



Рисунок 1 – Схема перевода выражений в польскую запись.

Здесь посимвольно слева направо анализируется вход¬ная строка, которая содержит исходное выражение, представленное в инфиксной форме. Операнды переписываются непосредственно в выход¬ную строку, содержащую польскую запись выражения, а операторы за¬носятся в стек. При этом в зависимости от приоритета операций они могут вытолкнуть из стека в выходную строку другие операторы. Приоритеты операторов для арифметических выражений даны в таблице 1.
Значение приоритета P(S(I)) 1 2 3
Операторы (символы S(I)) (,) +,– ,/(mod, div)




Пусть S(I) - анализируемый I -й символ входной строки, SТОRЕ(TOP) - верхний элемент стека. Тогда алгоритм перевода выражений в польскую запись можно представить в виде следующей последовательности шагов.
1. Если анализируемый символ S(I) входной строки является операндом, то он переписывается в выходную строку.
2. Если S(I) является оператором, который имеет больший приоритет, чем оператор в вершине стека, т.е. P(S(I)))>P(STORE(TOP)), то символ S(I) записывается в стек. В противном случае, если P(S(I)))P(STORE(TOP)), то из стека сначала последовательно вы¬бираются и помещаются в выходную строку операторы, имеющие прио¬ритет больший или равный P(S(I)), а затем символ S(I) запи¬сывается в cтек.
3. Если анализируемый символ S(I) ="(", то он помещается в стек, не выталкивая при этом ни одного оператора.
4. Если S(I) =")", то из стека выталкиваются и записывают¬ся в выходную строку все операторы до первого встретившегося сим¬вола "(". Символы "(" и ")" уничтожают друг друга и в выходную строку не включаются.
5. Шаги 1-4 повторяются до тех пор, пока не будут просмотрены все символы входной строки. Затем оставшиеся в стеке операторы переносятся в выходную строку.
azl-8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратная польская нотация Sexy Fox Помощь студентам 9 22.09.2011 14:57
Обратная польская запись Катуха Помощь студентам 6 27.12.2008 10:23
Обратная польская запись Роман Радер Общие вопросы Delphi 0 09.12.2008 18:18
Обратная польская нотация Sexy Fox Помощь студентам 2 22.06.2007 13:27