Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
ARTER616
0 / 0 / 3
Регистрация: 14.01.2017
Сообщений: 269
1

Дано выражение в обратной польской записи. Определите его значение

23.06.2017, 18:41. Просмотров 583. Ответов 10
Метки нет (Все метки)

В постфиксной записи (или обратной польской записи) операция записывается после двух операндов.
Например, сумма двух чисел A+B записывается как «A B + ». Запись «B C + D * » обозначает привычое нам (B+C)∗D, а запись «A B C + D * + » означает A+(B+C)∗D.
Достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения.
Дано выражение в обратной польской записи. Определите его значение.
ВХОДНЫЕ ДАННЫЕ

В единственной строке записано выражение в постфиксной записи, содержащее однозначные числа и операции +, −, ∗.
Строка содержит не более 100 чисел и операций.
ВЫХОДНЫЕ ДАННЫЕ

Необходимо вывести значение записанного выражения.
Гарантируется, что результат выражения, а также результаты всех промежуточных вычислений по модулю меньше 2^31.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2017, 18:41
Ответы с готовыми решениями:

Вычислить значение выражения представленного в обратной польской записи
Здравствуйте! Нужна помощь с заданием по питону. Задание: ...

Дано натуральное число. Определить сумму его цифр, больших a (значение a вводится с клавиатуры, 0<=a<=8)
Дано натуральное число. Определить сумму его цифр, больших a (значение a...

Вычислить значение произвольного выражения, представленного в обратной польской записи
Вычислить значение произвольного выражения, представленного в обратной польской...

Вычислить значение выражения в обратной польской записи с использованием стека
Вычислить значение выражения в обратной польской записи с использованием стека....

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

10
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
24.06.2017, 07:14 2
Хоть бы пример входных/выходных данных привели. А то не интересно.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def f(s):
    stack = []
    for i in s.split():
        try:
            i = int(i)
            # числа кладём в стек
            stack.append(i)
        except ValueError:
            #~ print(stack)
            # с верхушки стека забираем два числа
            a, b = stack.pop(), stack.pop()
            #~ print(stack)
            if i == '+':
                r = a + b
            elif i == '*':
                r = a * b
            else:
                raise NotImplemented
            stack.append(r)
    assert len(stack) == 1
    return stack[0]
 
 
print(f('1 2 +'))
print(f('1 2 + 4 *'))
print(f('1 2 3 + 4 * +'))
0
ARTER616
0 / 0 / 3
Регистрация: 14.01.2017
Сообщений: 269
25.06.2017, 13:22  [ТС] 3
А как с вводом сделать?
0
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
25.06.2017, 13:46 4
И опять, ни версии питона, ни какой ввод - из файла или командной строки.
Python
1
2
3
4
5
6
7
try:
    raw_input
except NameError:
    raw_input = input
 
while True:
    print(f(raw_input('> ')))
0
ARTER616
0 / 0 / 3
Регистрация: 14.01.2017
Сообщений: 269
26.06.2017, 17:43  [ТС] 5
Питон 3, ввод ручной, вылезает ошибка builtins.TypeError: exceptions must derive from BaseException
0
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
26.06.2017, 17:46 6
18 строчка:
Python
1
raise NotImplementedError
0
ARTER616
0 / 0 / 3
Регистрация: 14.01.2017
Сообщений: 269
26.06.2017, 17:51  [ТС] 7
Так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def f(s):
    stack = []
    for i in s.split():
        try:
            i = int(i)
            # числа кладём в стек
            stack.append(i)
        except ValueError:
            #~ print(stack)
            # с верхушки стека забираем два числа
            a, b = stack.pop(), stack.pop()
            #~ print(stack)
            if i == '+':
                r = a + b
            elif i == '*':
                r = a * b
            else:
                raise NotImplementedError
            stack.append(r)
    assert len(stack) == 1
    return stack[0]
try:
    raw_input
except NameError:
    raw_input = input
 
while True:
    print(f(raw_input('> ')))
0
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
26.06.2017, 17:52 8
Да.
0
ARTER616
0 / 0 / 3
Регистрация: 14.01.2017
Сообщений: 269
26.06.2017, 17:54  [ТС] 9
File "E:/Питон/untitled-1.py", line 28, in <module>
print(f(raw_input('> ')))
File "E:/Питон/untitled-1.py", line 18, in <module>
raise NotImplementedError
0
Рыжий Лис
Просто Лис
1188 / 511 / 344
Регистрация: 17.05.2012
Сообщений: 2,066
Записей в блоге: 8
26.06.2017, 17:55 10
Так специально не весь функционал реализован. Допишите программу сами.
0
ARTER616
0 / 0 / 3
Регистрация: 14.01.2017
Сообщений: 269
26.06.2017, 17:59  [ТС] 11
Знал бы я еще как питон устроен...
0
26.06.2017, 17:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2017, 17:59

Дано выражение a*b/(a+b). Организовать вычисление этого выражения, используя алгоритм польской записи. Применить системн
Дано выражение a*b/(a+b). Организовать вычисление этого выражения, используя...

Калькулятор обратной польской записи
Всем здравствуйте! Необходимо написать программу реализующую калькулятор...

K&R калькулятор обратной польской записи
В известной книге есть пример калькулятора в обратной польской записи. Проблема...


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

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

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