Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 42
#1

Парсер математических функций на java - Программирование Android

03.10.2016, 23:11. Просмотров 483. Ответов 6
Метки нет (Все метки)

Всех приветствую. Я хочу написать программу под android на java для работы с математическими функциями,но самое сложное,это написать парсер,который будет пытаться разобрать строку с функцией. При этом,стоит учитывать,что функции могут быть сложными,т.е выражение может иметь несколько скобок. Например,хотелось бы,чтобы парсер мог разобрать примерно такую строку:
y=x^(log(2*atan(x^2)/4*asin(1/2+0.5)))*tan(log(x^2))
При этом хотелось бы,чтобы даже если в строке не написано y=,парсер всё равно разбирал эту строку и возвращал результат вычисления выражения. Очень не хотелось бы писать парсер с нуля,поэтому у меня вопрос к форумчанам,может уже написан готовый парсер математических функций на java или другом языке? Заранее всех благодарю за помощь
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2016, 23:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсер математических функций на java (Программирование Android):

Java.io.IOException Jsoup парсер - Программирование Android
Суть: получить текст песни с этого сайта В консоли в эклипсе все работает прекрасно, но когда переношу это на андроид выдает мне...

Парсер математических функций - C#
Нужен парсер, который по строке 2x+3 создаст лябмду x => 2*x+3 обратную задачу я смог сделать с помощью дерева выражений: ...

Как написать парсер математических функций? - C++
Доброго времени суток. Хотелось бы узнать, как мне придти к тому, чтобы написать парсер математических выражений? Хочу написать оконное...

Парсер математических выражений - C#
Здравствуйте. Пишу понемногу для тренировки парсер обычных математических выражений, содержащим арифметические действия. Вопрос №1:...

Парсер математических формул - Turbo Pascal
Помогите мне, пожалуйста написать МОДУЛЬ для решения любого математического уравнения вида y:=f(x). Главная функция модуля должна...

Парсер математических выражений - C++
знаю изъезженная тема, надо написать парсер мат выражений с поддержкой скобок и некоторых несложных функций типа: sin, cos, tg, ctg, ln......

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
xoraxax
791 / 742 / 171
Регистрация: 05.07.2013
Сообщений: 3,412
Завершенные тесты: 1
03.10.2016, 23:54 #2
exp4j, jeval, вроде в apache commons что-то было
2
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 42
04.10.2016, 10:28  [ТС] #3
Здравствуйте. А не могли бы Вы дать ссылку на тот ресурс,где Вы это видели.
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
04.10.2016, 11:05 #4
https://en.wikipedia.org/wiki/Exp4j
1
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 42
05.10.2016, 14:26  [ТС] #5
Огромное Вам спасибо. Это как раз то,что мне нужно. Если всё,что я прочитал про эту библиотеку правда,то это очень здорово. Только у меня возникает вопрос,можно ли добавлять собственные функции и если да,то как? Операции добавлять точно можно,и я даже нашёл пример с добавлением факториала,а как добавлять свои функции я не понял. Например,я хочу,чтобы моя программа распознавала функции не только с натуральным логарифмом,но и с другими логарифмами. Также хотелось бы,например,чтобы моя программа вычисляла квадратный корень не только видя подстроку sqrt,но и видя символ √. Заранее благодарю всех за помощь
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
05.10.2016, 15:26 #6
Цитата Сообщение от КАВ Посмотреть сообщение
не только видя подстроку sqrt,но и видя символ √
В чем проблема заменить после парсинга с editText символа √ на sqrt.

Добавлено через 2 минуты
Пример реализации собственной функции:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function avg = new Function("avg", 4) {
 
    @Override
    public double apply(double... args) {
        double sum = 0;
        for (double arg : args) {
            sum += arg;
        }
        return sum / args.length;
    }
};
double result = new ExpressionBuilder("avg(1,2,3,4)")
        .function(avg)
        .build()
        .evaluate();
 
double expected = 2.5d;
assertEquals(expected, result, 0d);
0
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 42
08.11.2016, 18:24  [ТС] #7
Всех приветствую. Мне очень понравилась эта библиотека. Она действительно очень хорошо парсит сложные математические выражения и функции,но у меня возник по ней вопрос. Можно ли как-то выкрутиться и создать функцию с неопределённым количеством аргументов. Ведь,например,функция avg может иметь не 2 арогумента,а 3,4,5 и т.д. Просто метод apply,который я переопределяю,позволяет сделать это,но конструктор этого сделать не позволяет,а поле NumArguments,куда записывается количество аргументов,protected final. Если пренебречь конструктором,задав в нём одно количество аргументов,>=0,а в методе apply задать другое значение аргументов,тоже >=0,то программа вылетает с с соответствующим exception,где причина exception,как я понял,в том,что количество аргументов в конструкторе,не соответствует длине массива,который подаётся на вход методу apply. Помогите пожалуйста решить эту проблему.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2016, 18:24
Привет! Вот еще темы с ответами:

Парсер математических выражений - C (СИ)
Доброго времени суток! Собственно имеется кусок кода распознавания формулы в строке, по требованию преподавателя нужно реализовать именно...

Парсер математических выражений - Python
Есть код для парсера математических выражений (калькулятора) для операций: +, -, *, /. Помогите добавить к нему возможность работы с...

Парсер математических выражений на С/С++ - C++
Добрый вечер, можете написать или помочь написать парсер математических выражений для программы вычисляющей интеграл

Парсер математических функция - C++
Собственно кто-то может дать готовый парсер математических выражений ('+', '-' , '*' , '/', 'ln', 'sin', 'cos')? P.S: это и это я уже...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.11.2016, 18:24
Ответ Создать тему
Опции темы

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