9 / 58 / 21
Регистрация: 12.03.2017
Сообщений: 514
|
|
1 | |
Обратная польская запись20.11.2017, 14:27. Показов 42301. Ответов 39
Метки нет Все метки)
(
В обратной польской записи, которую также называют постфиксной, операция записывается после двух операндов. Например, сумма двух чисел A и B записывается как «A B +». Запись «B C + D *» обозначает привычное нам (B+C)∗D(B+C)∗D, а запись «A B C + D * +» означает A+(B+C)∗DA+(B+C)∗D. Достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения.
Дано выражение в постфиксой записи, содержащее однозначные числа, операции «+», «–», «*». Вычислите значение записанного выражения. Формат входных данных В единственной строке записано выражение в постфиксной записи, содержащее однозначные числа и операции «+», «–», «*». Строка содержит не более 100 чисел и операций. Числа и операции отделяются друг от друга ровно одним пробелом. Формат выходных данных Необходимо вывести значение записанного выражения. Гарантируется, что результат выражения, а также результаты всех промежуточных вычислений по модулю меньше 231. Примечания В данной задаче рекомендуется считывать данные с экрана в тип char, то есть по одному символу до тех пор, пока не будет встречен перевод строки (символ ’\n’). Для чтения можно использовать функцию getchar() в C++, которая находится в библиотеке #include<cstdio>. Примеры входные данные 8 9 + 1 7 - * выходные данные -102
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
20.11.2017, 14:27 | |
Ответы с готовыми решениями:
39
Обратная польская запись Обратная польская запись
|
3528 / 2185 / 400
Регистрация: 09.09.2017
Сообщений: 8,988
|
|
20.11.2017, 15:29 | 2 |
Простой вариант через стек. Если на входе число то оно помещается в стек. Если операция, то из стека извлекаются операнды, после чего результат помещается обратно. Последним числом, оставшемся в стеке, будет результат.
2
|
9 / 58 / 21
Регистрация: 12.03.2017
Сообщений: 514
|
|
20.11.2017, 20:55 [ТС] | 3 |
Но мне нужна программа! Я только начал проходить структуры данных в С++. Так что помогите мне сделать программу! Прошу!
0
|
3528 / 2185 / 400
Регистрация: 09.09.2017
Сообщений: 8,988
|
||||||
20.11.2017, 23:50 | 4 | |||||
Помочь могу, писать код за вас не буду.
Для начала реализуйте стек для чисел. Раз в условии сказано что не более 100 чисел, можно делать его статическим.
1
|
21.11.2017, 02:38 | 5 | |||||
2
|
9 / 58 / 21
Регистрация: 12.03.2017
Сообщений: 514
|
|
21.11.2017, 20:54 [ТС] | 6 |
Спасибо за задачу! Но пользователь должен вводить не только 8 9 + 1 7 - *, но и другие значения. Как это сделать!
0
|
Заклинатель змей
611 / 508 / 213
Регистрация: 30.04.2016
Сообщений: 2,412
|
|
21.11.2017, 21:09 | 7 |
Pavlin234, например, поменять istringstream на string и вводить как обычно ручками
0
|
9 / 58 / 21
Регистрация: 12.03.2017
Сообщений: 514
|
|
21.11.2017, 21:12 [ТС] | 8 |
спасибо!
0
|
6 / 5 / 4
Регистрация: 14.01.2017
Сообщений: 292
|
|
30.11.2017, 21:56 | 9 |
Пробовал поменять, выдает целую гору ошибок. В чем проблема?
0
|
6 / 5 / 4
Регистрация: 14.01.2017
Сообщений: 292
|
|
30.11.2017, 22:22 | 11 |
Ну код то от этого не поменялся
0
|
6 / 5 / 4
Регистрация: 14.01.2017
Сообщений: 292
|
|
01.12.2017, 18:06 | 13 |
0
|
01.12.2017, 18:20 | 14 | |||||
1
|
6 / 5 / 4
Регистрация: 14.01.2017
Сообщений: 292
|
|
01.12.2017, 18:23 | 15 |
круть
Добавлено через 1 минуту И все же, как объявить?
0
|
6 / 5 / 4
Регистрация: 14.01.2017
Сообщений: 292
|
||||||
01.12.2017, 18:26 | 17 | |||||
Что я тогда делаю не так?
1
|
6 / 5 / 4
Регистрация: 14.01.2017
Сообщений: 292
|
|
01.12.2017, 18:41 | 19 |
![]()
0
|
01.12.2017, 19:41 | 20 | |||||
Это не "сложно", это какое-то другое чувство.
Вот, к примеру, одно дело когда человек спрашивает на форуме, какие у него ошибки в программе Hello world. И при этом приводит код самой первой своей программы Hello world с ошибками соответствующего ей уровня. "Соответствующего", то есть такие же простые: пропустил точку с запятой, скобку и.т.д. Такому человеку помочь именно что не сложно, потому что ты видишь в нём потенциального программиста, который начинает с малого. И совершенно другое дело, когда пишешь человеку какой-нибудь мудрёный алгоритм Малхотры — Кумара — Махешвари, рассуждаешь в душе о высоких материях, об оптимизациях потоков в ориентированных графах, мат. анализе уровня кандидатской (утрирую конечно). И ожидаешь найти себе ну как минимум пассивно понимающего это всё собеседника, а лучше ожидать даже активное участие какое-то, чтобы его ошибки если и имели место, то были бы и тут соответствующего уровня. Опять-таки соответствующего, на этот раз это означает: окей, пусть будут ошибки, но человек не будет отвлекаться из-за каждой пропущенной точки с запятой. Вот ожидаещь ты этого уровня от человека, а он тебе в ответ "а куда тут точку с запятой ставить?". А-А-А-аа! Ненависть! В такие моменты хочется кричать: "так какого чёрта ты не изучаешь самое начало учебника по С++, а здесь со мной высокие материи обсуждаешь?!" Иначе это всё бессмысленно. В изучении программирования есть некоторые вехи, через которые нельзя не пройти, нельзя перепрыгнуть, срезав путь. Иначе, не освоив очередную главу по программированию, человек будет видеть последующие как китайскую грамоту и тут ты ему хоть объясняй, хоть обобъясняйся, ученик ничего не поймёт. Возьмём, например конкретно твоё задание. Чтобы вычислять польскую запись надо использовать алгоритм с применением стека, для этого надо знать просто что такое стек и уметь его использовать, для этого желательно знать основные контейнеры STL, среди которых этот стек присутствует для этого желательно уметь написать этот стек для начала ручками это даст понимание не просто "что такое стек", но и как он примерно реализован в СТЛ, какие подводные камни при работе с ним присутствуют, а от каких он нас огораживает В свою очередь, стек, очередь, дек это контейнеры уровнем абстракции чуть выше векторов и списков, значит сначала начинать надо с них. Но перед тем как использовать СТЛ нужно хотя бы понимать что такое вообще объекты, откуда у них берутся методы и как их вызывать А значит перед этим нужно изучить классы и шаблоны. Чтобы понимать применение классов, а вместе с ними и ООП, нужно ИМХО владеть уверенными навыками обычного процедурного программирования.(Кто-то тут поспорит, приведёт в пример Шарп и Яву, книги Б.Эккеля... ой, всё...) Иначе просто отсутствует понимание "зачем нужны классы", ведь если ты не написал ни одной программы, то тебе и нечего улучшать, применяя эти самые классы и объекты. Итак поэтому предварительно нужно изучить процедурное программирование. А это десятки и десятки программ вида "сортировка массива" и "поиск элемента по условию".(кстати, где-то тут среди десятков простейших программ уже должны быть пара игр типа змеек и тетрисов) А это значит, что на написание твоей программы про ОПЗ требуется время, время и время на предварительную подготовку. Иначе даже начинать её писать бессмысленно. Всё равно, что перерисовывать китайский текст без понимания сути. Добавлено через 7 минут
6
|
01.12.2017, 19:41 | |
Помогаю со студенческими работами здесь
20
Обратная польская запись Обратная польская запись Обратная польская запись
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |