Russian Qt Forum

Программирование => Общий => Тема начата: lex_newton от Январь 25, 2009, 21:35



Название: Ищу: библиотеку для обработки математического выражения
Отправлено: lex_newton от Январь 25, 2009, 21:35
Нужна библиотека для обработки математического выражения.

Подскажите название, или поделитесь ссылкой, плз!

Что она должна уметь делать -->

На входе(к примеру)
константы - PI = 3.14, a = 10, b = 200 и т.п.

Пользователь вводит формулу:
sin(a*PI + b)

На выходе:
результат выполнения данной формулы, с учетом поданных на входе коэффициентов.

Заранее спасибо!
(язык c/c++)



Название: Re: Ищу: библиотеку для обработки математического выражения
Отправлено: Khs от Январь 26, 2009, 00:30
Тебе нужен парсер математических выражений.

Мож ето чем поможет:
http://www.codeproject.com/KB/recipes/MathieuMathParser.aspx
Хотя я думаю этот будет тяжеловат, есть и более простые реализации. Все зависит от того насколько глубоко он тебе нужен.

Да и в инете куча парсеров реализованных...гугл сходит с ума от запроса на парсеры ;)


Название: Re: Ищу: библиотеку для обработки математического выражения
Отправлено: Swappp от Январь 26, 2009, 01:09
Поскольку форум называется "Russian Qt Forum", отмечу, что поставленную задачу можно реализовать с помощью Qt. А точнее QtScript. Конечно QtScript обладает избыточной функциональностью для подобной задачи. Но в случае использования Qt в других частях проекта это может быть вполне неплохим решением.


Название: Re: Ищу: библиотеку для обработки математического выражения
Отправлено: lex_newton от Январь 26, 2009, 07:58
log1c: Оу! Спасибо огромное!
Я чтото не додумался, что это называется парсером...

Swapp: Ага. в курсе о QtScript, но ради нескольких математических функций - это неоправданно.


Вопрос закрыт.


Название: Re: Ищу: библиотеку для обработки математического выражения
Отправлено: lex_newton от Январь 27, 2009, 15:09
Результаты:

Наиболее простая в использовании и достаточно функциольная осказалась библиотека под названием muParser.

Домашняя страница http://muparser.sourceforge.net/ (http://muparser.sourceforge.net/)

Вот пример использования:

Код:
#include "muParser.h"

// Function callback
double MyFunction(double a_fVal)
{
  return a_fVal*a_fVal;
}

// main program
int main(int argc, char* argv[])
{
  using namespace mu;

  try
  {
    double fVal = 1;
    Parser p;
    p.DefineVar("a", &fVal);
    p.DefineFun("MyFunc", MyFunction);
    p.SetExpr("MyFunc(a)*pi+min(10,a)");
    std::cout << p.Eval() << endl;
  }
  catch (Parser::exception_type &e)
  {
    std::cout << e.GetMsg() << endl;
  }
  return 0;
}