@Dango45

Как написать программу на питоне которая описывает решения выражения?

Нужно написать программу которая обучающую программу, которая показывает рациональные приемы
математических вычислений при устном и письменном решении примеров
Входные данные
Строка, которая представляет собой математическое выражение, содержащее скобки и
арифметические операции:
● сложение - "+"
вычитание - "."
● умножение -
целочисленное деление -//
● возведение в степень *
Пример:
1.
5+(15+9-5)*11+121//11
2 23*27-21+ 14*18+ 6*8
3. 16*6+15*36 +25*12
4. 15*99-14*14 -6*14 +15
5. 25*5 (3*9) + 11*12+ 49 ** 2

Выходные данные
Программа
показывает этапы вычисления выражения в порядке приоритета
арифметических операций. Каждый этап
сопровождается математическим
объяснением рационального приема, правила или закона.
Возможный вывод программы для 5го примера:
1) 25*5-(3*9) + 11*12+49 ** 2
2) действие в скобках:
3*9=3* (10-1)=3*10-3*1=30-3=27
умножение на 9: число умножается на 10 и вычитается это же число
Получаем:
255-27+ 11 12 +49 ** 2
3) 25*5=(25* 10): 2= 250 : 2 =125
умножение на 5: число сначала умножаем на 10, а потом делим на 2
Получаем:
125-27+ 11 12 +49 ** 2
4) 11 12 = 1 "(1 + 2)" 2 = 132
умножение на 11: чтобы на 11 умножить двузначное число нужно
сложить его цифры и записать результат в середину. Если результат
получается больше 10, то десятки от суммы прибавляем к десяткам
исходного числа, а единицы записываем в центр.
Получаем:
125-27+ 132+ 49 ** 2
5) 49 ** 2; (50-49 = 1); (25-1=24); (1 **2=01) 49**2= 2401
чтобы возвести в квадрат числа от 40 до 60 нужно
1. от 50 отнять это число
2.
от 25 отнять результат 1го действия
3. возвести количество единиц в квадрат если получилось однозначное
число дописать 0 слева
4 записать подряд результат 2го и Зго действия
Получаем:
125-27+132+ 2401
6) -27+132= 132-27= 132 - (30-3) = 132-30+3= 102+3 = 105
Получаем:
125 + 105+2401
7) 125+ 105 = 125 + 100+5 = 225 + 5 = 2

Есть ли такой скрипт в интернете?
Есть ли аналог на других языках программирования?
Подскажите направление решения вопроса
  • Вопрос задан
  • 74 просмотра
Пригласить эксперта
Ответы на вопрос 1
@rPman
какой курс университета эта задача?
очень интересная

для начала нужно определить правила, буквально перечислив ситуации когда так надо делать:
умножение на 9: число умножается на 10 и вычитается это же число

чтобы на 11 умножить двузначное число нужно
сложить его цифры и записать результат в середину...

возвести количество единиц в квадрат если получилось однозначное
число дописать 0 слева


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

в принципе на все вышеописанное кроме 'рациональных' вычислений есть готовые библиотеки, но что то мне говорит что цель задания именно в велосипеде
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы