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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2013, 10:41   #1
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию преобразование из ПОЛИЗа в инфиксную знапись

подскажите пожалуйста алгоритм, как преобразовать из ПОЛИЗа обратно в инфиксную запись с помощью стека?

abc+*5-

a*(b+c)-5

1. Если операнд, то заносим в стек.
2. Если знак операции
-из стека взять два верхних числа

а что делать дальше? как определить, где нужно ставить скобки?

Последний раз редактировалось Sv.; 12.07.2013 в 11:30.
Sv. вне форума Ответить с цитированием
Старый 12.07.2013, 11:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

"ПОЛИЗ" - это польская обратная запись?

Тогда, если не смущает появление лишних скобок, то алгоритм можете подсмотреть в моей программке на Паскаль...
тут
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2013, 15:10   #3
Sv.
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 48
По умолчанию

Код:
case s[i] of
       ' ' : begin end;
       '+' : begin s1 := PopStr; s2 := PopStr;
                   PushStr( '(' +  s2 + ' + ' + s1 + ')' ); end;
       '-' : begin s1 := PopStr; s2 := PopStr;
                   PushStr( '(' +  s2 + ' - ' + s1 + ')' ); end;
       '*' : begin s1 := PopStr; s2 := PopStr;
                   PushStr( '(' +  s2 + ' * ' + s1 + ')' ); end;
       '/' : begin s1 := PopStr; s2 := PopStr;
                   PushStr( '(' +  s2 + ' / ' + s1 + ')' ); end;
      end;
а как данная часть будет на с++ будет выглядеть?
Sv. вне форума Ответить с цитированием
Старый 12.07.2013, 15:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я C++ не знаю. Поэтому просто поясню, что делают процедуры/функции в процитированном Вами кусочке кода.

PopStr - это функция, которая вытаскивает очередное значение из стека (в данном случае стек упрощённо представлен, как обычный статический массив строк, с глобальной переменной - указатель стека) и уменьшает переменную-указатель стека.

процедура PushStr помещает переданную через параметер строку в стек (в массив), увеличивая при этом переменную-указатель стека.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование Stasiksis Общие вопросы C/C++ 2 28.02.2013 10:27
преобразование Dimarik Общие вопросы .NET 2 20.04.2010 20:57
Преобразование в С++ Davlet M Помощь студентам 3 03.10.2009 14:30
Преобразование... prizrak1390 Общие вопросы Delphi 2 02.04.2008 11:24