М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
RykaBa3yka
RykaBa3yka
05.03.2023 15:45 •  Информатика

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

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

Перед тем, как приступить к написанию программы, нужно рассмотреть, как мы можем решить эту задачу. В данном случае, мы будем использовать алгоритм "обратной польской записи" (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
```

Таким образом, программа успешно вычисляет арифметическое выражение, используя алгоритм обратной польской записи.
4,8(27 оценок)
Проверить ответ в нейросети
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ