Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/69: Рейтинг темы: голосов - 69, средняя оценка - 4.96
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
1

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

20.07.2013, 15:52. Просмотров 14156. Ответов 8
Метки нет (Все метки)

Простите что не совсем в том разделе, просто его больше всего людей посещает)
По теме:
Как при вычислении выражения из строки записанной в ОПЗ отличить унарный минус от бинарного?
Как отличить их при переводе строки в ОПЗ я знаю, просто не могу понять как не применяя никаких спец. уловок, из чисто поданной на вход строки УЖЕ записанной в ОПЗ отличить унарный минус от бинарного?
Или еще хуже, если их несколько в строке. Пример (-8)*(-9).
ОПЗ этого выражения 8-9-*, как это посчитать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2013, 15:52
Ответы с готовыми решениями:

Обратная польская запись
Пожалуйста помогите, всю голову себе сломал. Задание: "Обеспечить перевод инфиксного выражения в...

Обратная польская запись
Нужна помощь. Есть программа с общей польской записью. Программа принимает только буквенное...

Обратная польская запись
Что такое обратная польская запись и как её реализовать на С++? Почему когда в программе я пишу...

Обратная Польская Запись
Сам вопрос: Я написал программу, она работает, но препод по Структурам данных сломал ее в два...

8
Каратель
Эксперт С++
6598 / 4019 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
20.07.2013, 15:59 2
Цитата Сообщение от alig007 Посмотреть сообщение
Как отличить их при переводе строки в ОПЗ я знаю
так вот при переводе строки в ОПЗ и вводим новое обозначение унарного минуса: #, $, %, &, etc
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
20.07.2013, 17:32  [ТС] 3
а если не я допустим перевожу в опз? если я получил готовую строку в опз, с такими минусами, и нужно просто вычислить ее? то отличить унарный от бинарного невозможно?
0
160 / 101 / 14
Регистрация: 17.10.2012
Сообщений: 488
20.07.2013, 17:38 4
Так получается, что в конце программа ожидает знак оператора, таким образом мы используем один символ для обоих минусов. Получается
5-4--
(-5) - (-4)

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

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

Добавлено через 54 секунды
Jupiter, спасибо, так и буду делать наверное
0
Higher
1945 / 1211 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.07.2013, 00:01 7
http://e-maxx.ru/algo/expressions_parsing
Можно заметить, что перед унарной операцией всегда стоит либо другая операция, либо открывающая скобка, либо вообще ничего (если она стоит в самом начале строки). Перед бинарной операцией, напротив, всегда стоит либо операнд (число/переменная), либо закрывающая скобка. Таким образом, достаточно завести какой-нибудь флаг для указания того, может ли следующая операция быть унарной или нет.
0
620 / 474 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
21.07.2013, 00:47 8
Когда разбираешь ОПЗ, смотри на шаг вперёд, если стоит оператор, то унарный, если стоит перменная, то бинарный.
0
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
21.07.2013, 12:24  [ТС] 9
Wolkodav, пост номер 4, посмотри последний пример

Добавлено через 3 минуты
diagon, там идет разбор из инфиксной формы, я же спрашивал что делать если выражение уже в опз.
Ну впрочем, тему можно считать закрытой.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2013, 12:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Обратная польская запись
Нужно создать класс с++ для вычисления обратной польской записи с помощь стека.

Обратная польская запись
В обратной польской записи, которую также называют постфиксной, операция записывается после двух...

Обратная польская запись
Доброго времени суток. Нужно сделать программу которая переводит арифм. выражение в обратную...

Обратная польская запись
Здравствуйте, изучаю обратную польскую запись, столкнулся с такой проблемой: Перерыл множество...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.