Russian Qt Forum
Ноябрь 23, 2024, 22:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ищу: библиотеку для обработки математического выражения  (Прочитано 8201 раз)
lex_newton
Гость
« : Январь 25, 2009, 21:35 »

Нужна библиотека для обработки математического выражения.

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

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

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

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

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

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

Записан
Khs
Гость
« Ответ #1 : Январь 26, 2009, 00:30 »

Тебе нужен парсер математических выражений.

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

Да и в инете куча парсеров реализованных...гугл сходит с ума от запроса на парсеры Подмигивающий
« Последнее редактирование: Январь 26, 2009, 00:41 от log1c » Записан
Swappp
Гость
« Ответ #2 : Январь 26, 2009, 01:09 »

Поскольку форум называется "Russian Qt Forum", отмечу, что поставленную задачу можно реализовать с помощью Qt. А точнее QtScript. Конечно QtScript обладает избыточной функциональностью для подобной задачи. Но в случае использования Qt в других частях проекта это может быть вполне неплохим решением.
Записан
lex_newton
Гость
« Ответ #3 : Январь 26, 2009, 07:58 »

log1c: Оу! Спасибо огромное!
Я чтото не додумался, что это называется парсером...

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


Вопрос закрыт.
Записан
lex_newton
Гость
« Ответ #4 : Январь 27, 2009, 15:09 »

Результаты:

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

Домашняя страница 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;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.094 секунд. Запросов: 21.