1 / 1 / 1
Регистрация: 23.08.2015
Сообщений: 67
|
|
1 | |
Калькулятор сложных выражений11.04.2016, 07:56. Показов 2320. Ответов 7
Метки нет (Все метки)
Доброго всем времени суток. Появилась необходимость реализовать калькулятор сложных выражений для приложения.
Суть: есть некое поле ввода, в которое пользователь вписывает некое выражение, например: 2+6*2/(7-1)^2 Каюсь, искал максимум часа полтора, после этого все-аки решился обратиться сюда. Быть может есть готовые алгоритмы для решения данной задачи, или есть мысли какие подходящие?
0
|
11.04.2016, 07:56 | |
Ответы с готовыми решениями:
7
Калькулятор для расчета сложных выражений Вычисление сложных выражений Вычисления сложных выражений Срочно!!! Создание сложных выражений |
Модератор
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
|
||||||
11.04.2016, 16:50 | 2 | |||||
Зависит от языка и требуемого синтаксиса. В языке может быть готовый метод типа eval в javascript.
Если нет, то есть два наиболее популярных способа это сделать. 1. Использовать lexer generators и parser generators. Пишете формальную грамматику (описание требуемого языка выражений). Запускаете генераторы. Получаете исходный код. Добавляете его к исходному коду проекта. 2. Используете Monadic Parser Combinators Находите библиотеку с базовыми комбинаторами. Используя их, пишете парсер для требуемого языка выражений. Добавлено через 16 минут Например, вот так на C# выглядит парсер выражений в лямбда-выражения, написанный на основе библиотеки Sprache ("Tiny C# Monadic Parser Framework"). (нагуглил за 5 минут)
Код
() => (2 + ((6 * 2) / ((7 - 1) ^ 2))) 2,33333333333333
1
|
45 / 21 / 6
Регистрация: 28.02.2013
Сообщений: 194
|
|
22.04.2016, 22:41 | 3 |
тут Программа для решения ребуса
в самом конце в программе основной кусок - это вычисление выражения
1
|
23.04.2016, 22:51 | 4 |
1
|
1 / 1 / 1
Регистрация: 23.08.2015
Сообщений: 67
|
|
11.05.2016, 10:10 [ТС] | 5 |
Спасибо всем. Решил задачу алгоритмом обратной польской нотации.
0
|
12.05.2016, 14:15 | 6 |
К этой задаче можно подойти так
1. Вы заключает все выражение в круглые скобки. 2. Далее программа ищет первую Закрывающуюся скобку. 3. А перед ней ищет первую Открывающуюся скобку. 4. Между этими скобками других скобок нет. 5. Программа ищет самую высшую операцию по приоритету Приоритет: 1) унарный минус и унарный плюс 2) возведение в степень 3) умножение и деление 4) сложение и вычитание 6. Выполняется найденная операция 7. Все повторяется до тех пор, пока есть операции в найденных скобках 8. Итак в скобках остается только число - результат операций 9. Выбрасываем уже не нужную пару скобок 10. Имеем арифметическое выражение, где на пару скобок меньше 11. Используем рекурсию. То есть вновь вызываем данную функцию 12. Рекурсия завершается, когда скобок больше не останется 13. Последнее число и есть окончательный результат
0
|
1 / 1 / 1
Регистрация: 23.08.2015
Сообщений: 67
|
|
16.05.2016, 06:23 [ТС] | 7 |
geh, я так понимаю это рекурсивный спуск?
0
|
16.05.2016, 08:25 | 8 |
MoteX
Да. Вы совершенно правы. Именно рекурсивный спуск я использовал при написании программ, вычисляющих арифметическое выражение.
0
|
16.05.2016, 08:25 | |
16.05.2016, 08:25 | |
Помогаю со студенческими работами здесь
8
Объясните устройство сложных вложенных выражений-генераторов Функция, расчитывающая значение сложных тригонометрических выражений Написать программу для решения сложных выражений. Калькулятор сложных % Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |