Форум программистов, компьютерный форум CyberForum.ru

Обратная польская запись - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.60
alig007
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
20.07.2013, 15:52     Обратная польская запись #1
Простите что не совсем в том разделе, просто его больше всего людей посещает)
По теме:
Как при вычислении выражения из строки записанной в ОПЗ отличить унарный минус от бинарного?
Как отличить их при переводе строки в ОПЗ я знаю, просто не могу понять как не применяя никаких спец. уловок, из чисто поданной на вход строки УЖЕ записанной в ОПЗ отличить унарный минус от бинарного?
Или еще хуже, если их несколько в строке. Пример (-8)*(-9).
ОПЗ этого выражения 8-9-*, как это посчитать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2013, 15:52     Обратная польская запись
Посмотрите здесь:

обратная польская запись. C++
Обратная польская запись C++
Обратная польская запись C++
C++ Калькулятор (обратная польская запись)
C++ Обратная польская запись
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.07.2013, 15:59     Обратная польская запись #2
Цитата Сообщение от alig007 Посмотреть сообщение
Как отличить их при переводе строки в ОПЗ я знаю
так вот при переводе строки в ОПЗ и вводим новое обозначение унарного минуса: #, $, %, &, etc
alig007
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
20.07.2013, 17:32  [ТС]     Обратная польская запись #3
а если не я допустим перевожу в опз? если я получил готовую строку в опз, с такими минусами, и нужно просто вычислить ее? то отличить унарный от бинарного невозможно?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
20.07.2013, 17:38     Обратная польская запись #4
Так получается, что в конце программа ожидает знак оператора, таким образом мы используем один символ для обоих минусов. Получается
5-4--
(-5) - (-4)

5-4-
(-5) - 4
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.07.2013, 17:41     Обратная польская запись #5
Цитата Сообщение от alig007 Посмотреть сообщение
а если не я допустим перевожу в опз? если я получил готовую строку в опз, с такими минусами, и нужно просто вычислить ее? то отличить унарный от бинарного невозможно?
нет
alig007
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
20.07.2013, 17:59  [ТС]     Обратная польская запись #6
Цитата Сообщение от iRomul Посмотреть сообщение
Так получается, что в конце программа ожидает знак оператора, таким образом мы используем один символ для обоих минусов. Получается
5-4--
(-5) - (-4)

5-4-
(-5) - 4
а если это не в конце будет? где-то посреди строки?

Добавлено через 54 секунды
Jupiter, спасибо, так и буду делать наверное
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.07.2013, 00:01     Обратная польская запись #7
http://e-maxx.ru/algo/expressions_parsing
Можно заметить, что перед унарной операцией всегда стоит либо другая операция, либо открывающая скобка, либо вообще ничего (если она стоит в самом начале строки). Перед бинарной операцией, напротив, всегда стоит либо операнд (число/переменная), либо закрывающая скобка. Таким образом, достаточно завести какой-нибудь флаг для указания того, может ли следующая операция быть унарной или нет.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.07.2013, 00:47     Обратная польская запись #8
Когда разбираешь ОПЗ, смотри на шаг вперёд, если стоит оператор, то унарный, если стоит перменная, то бинарный.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 12:24     Обратная польская запись
Еще ссылки по теме:

C++ Обратная Польская Запись
C++ Тригонометрия и обратная польская запись
Калькулятор: обратная польская запись C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alig007
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
21.07.2013, 12:24  [ТС]     Обратная польская запись #9
Wolkodav, пост номер 4, посмотри последний пример

Добавлено через 3 минуты
diagon, там идет разбор из инфиксной формы, я же спрашивал что делать если выражение уже в опз.
Ну впрочем, тему можно считать закрытой.
Yandex
Объявления
21.07.2013, 12:24     Обратная польская запись
Ответ Создать тему
Опции темы

Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru