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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 58, средняя оценка - 4.60
alig007
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
#1

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

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

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

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

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

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

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

Обратная польская запись - C++
Нужна помощь. Есть программа с общей польской записью. Программа принимает только буквенное выражение ( например: "a+b+c*d" и т.д), а...

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

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

5-4-
(-5) - 4
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.07.2013, 17:41 #5
Цитата Сообщение от alig007 Посмотреть сообщение
а если не я допустим перевожу в опз? если я получил готовую строку в опз, с такими минусами, и нужно просто вычислить ее? то отличить унарный от бинарного невозможно?
нет
1
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, спасибо, так и буду делать наверное
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.07.2013, 00:01 #7
http://e-maxx.ru/algo/expressions_parsing
Можно заметить, что перед унарной операцией всегда стоит либо другая операция, либо открывающая скобка, либо вообще ничего (если она стоит в самом начале строки). Перед бинарной операцией, напротив, всегда стоит либо операнд (число/переменная), либо закрывающая скобка. Таким образом, достаточно завести какой-нибудь флаг для указания того, может ли следующая операция быть унарной или нет.
0
Wolkodav
603 / 456 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
21.07.2013, 00:47 #8
Когда разбираешь ОПЗ, смотри на шаг вперёд, если стоит оператор, то унарный, если стоит перменная, то бинарный.
0
alig007
1 / 1 / 0
Регистрация: 30.01.2013
Сообщений: 28
21.07.2013, 12:24  [ТС] #9
Wolkodav, пост номер 4, посмотри последний пример

Добавлено через 3 минуты
diagon, там идет разбор из инфиксной формы, я же спрашивал что делать если выражение уже в опз.
Ну впрочем, тему можно считать закрытой.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2013, 12:24
Привет! Вот еще темы с ответами:

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

Обратная польская запись. С++ - C++
Необхдимо дописать программу, что бы она работала с унарным минусом. Обратная польская запись, С++. #include <iostream> #include...

Обратная польская запись - C++
Подскажите, как по обратной польской записи выражения построить дерево выражения Например: дана запись 1 2 + 3 4...

Тригонометрия и обратная польская запись - C++
Как работает польская запись - понятно, однако как добавить к примеру sin(a), чтобы его не выводило, как sina, а чтобы просто посчитало?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.07.2013, 12:24
Ответ Создать тему
Опции темы

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