нужна Напишите программу, которая вычисляет арифметическое выражение, введённое в виде
символьной строки. Выражение содержит только целые числа и знаки арифметических
действий: сложения, вычитания, умножения и деления. Деление выполняется с отбрасыванием
остатка.
Входные данные
Входная строка содержит запись арифметического выражения.
Выходные данные
Программа должна вывести результат вычисления переданного ей выражения.
Примеры
входные данные
2+14*3-15/4*3
выходные данные
35

Dim102 Dim102    1   15.04.2021 20:04    191

Ответы
iliasnurdos iliasnurdos  21.01.2024 22:10
Хорошо, я с удовольствием помогу вам написать программу для вычисления арифметического выражения.

Перед тем, как приступить к написанию программы, нужно рассмотреть, как мы можем решить эту задачу. В данном случае, мы будем использовать алгоритм "обратной польской записи" (Reverse Polish Notation), чтобы вычислить значение арифметического выражения.

Шаг 1. Разбиение строки на отдельные элементы (числа и операции).

Сначала нам нужно разбить входную строку на отдельные элементы, которые могут быть числами или операциями. Для этого мы можем использовать функцию `split()`, разделив строку по символу-разделителю `' '`. В итоге, получим список элементов.

Шаг 2. Преобразование в обратную польскую запись.

Далее нам нужно преобразовать полученный список элементов в обратную польскую запись. Для этого мы будем использовать стек (stack) и следующие правила:
- Если элемент является числом, добавляем его в выходной список.
- Если элемент является операцией, то мы добавляем операцию в стек. При этом, перед добавлением мы должны проверить операции, уже находящиеся в стеке, и, если нам нужно выполнить какую-либо операцию, мы сначала должны вынуть операцию из стека (если она имеет больший или равный приоритет), а затем добавить текущую операцию.
- Если мы достигли конца списка, вынимаем все операции из стека и добавляем их в выходной список.

Шаг 3. Вычисление значения выражения.

Теперь нам нужно вычислить значение выражения, представленного в обратной польской записи. Для этого мы используем стек и следующие правила:
- Если элемент является числом, добавляем его в стек.
- Если элемент является операцией, мы берем два последних числа из стека, выполняем операцию и помещаем результат обратно в стек.

Шаг 4. Вывод результата.

В конце, мы должны получить одно число в стеке - это и будет результатом вычисления арифметического выражения.

Вот полный код программы, реализующей вышеописанный алгоритм:

```python
def calculate(expression):
operators = {'+': 1, '-': 1, '*': 2, '/': 2}

def create_rpn(expression):
rpn = []
stack = []
for element in expression:
if element.isdigit():
rpn.append(element)
elif element in operators:
while stack and operators.get(stack[-1], 0) >= operators.get(element, 0):
rpn.append(stack.pop())
stack.append(element)
while stack:
rpn.append(stack.pop())
return rpn

def evaluate_rpn(rpn):
stack = []
for element in rpn:
if element.isdigit():
stack.append(element)
else:
b = stack.pop()
a = stack.pop()
if element == '+':
stack.append(str(int(a) + int(b)))
elif element == '-':
stack.append(str(int(a) - int(b)))
elif element == '*':
stack.append(str(int(a) * int(b)))
elif element == '/':
stack.append(str(int(a) // int(b)))
return stack[0]

expression = expression.replace(' ', '')
elements = []
number = ''
for char in expression:
if char.isdigit():
number += char
else:
if number:
elements.append(number)
number = ''
elements.append(char)
if number:
elements.append(number)

rpn = create_rpn(elements)
result = evaluate_rpn(rpn)
return result


# Пример использования программы
expression = '2+14*3-15/4*3'
result = calculate(expression)
print(result)
```

Результат выполнения программы будет выводиться на экран:

```
35
```

Таким образом, программа успешно вычисляет арифметическое выражение, используя алгоритм обратной польской записи.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика