Название: Посоветуйте вычислитель :) Отправлено: burunduk от Ноябрь 12, 2007, 12:24 чтобы самому не изобретать
нужно вот такие строки вычислять, формулу задаёт пользователь: =Сумма1*(Коэффициент1+Коэффициент2):100-Сумма2 Название: Re: Посоветуйте вычислитель :) Отправлено: Kainit от Ноябрь 12, 2007, 12:58 Если я правильно понял вопрос, то вы ищете парсер символьных арифметических выражений?
Вы хотите какой-нибудь класс типа Formula Formula *pFormula = new Formula(); pFormula->Set("Сумма1*(Коэффициент1+Коэффициент2):100-Сумма2"); pFormula->SetValue("Сумма1",123); pFormula->SetValue("Сумма2",123); pFormula->SetValue("Коэффициент1",123); pFormula->SetValue("Коэффициент2",123); double result = pFormula->Value(); Вы этого хотите? Название: Re: Посоветуйте вычислитель :) Отправлено: burunduk от Ноябрь 12, 2007, 13:15 именно этого :)
Название: Посоветуйте вычислитель :) Отправлено: sikuda от Ноябрь 12, 2007, 13:20 Если У Вас Версия Qt 4.3 то читайте про модуль QtScript
Типа QScriptValue val(&engine, 123); engine.globalObject().setProperty("foo", val); qDebug() << "foo times two is:" << engine.evaluate("foo * 2").toNumber(); Если Ниже и это критично - Смотрите в сторону QSA. Название: Re: Посоветуйте вычислитель :) Отправлено: Kainit от Ноябрь 12, 2007, 16:29 Пути 2 (1- дешёвый и простой, но медленный и 2-интересный и быстрый)
1. Код: QString functionString = "Сумма1*(Коэффициент1+Коэффициент2):100-Сумма2"; 2. Первый способ заставит вас при любом изменении любого коэффициента перехреначивать первоначальную строку что есть очень и очень медленно при массивных вычислениях. Второй способ состоит в том, чтобы самому написать парсер. У меня код парсера занял 300 строчек. По этому делу есть специальная литература и статьи в интернете, но можно их не читать и написать исходя из здравого смысла. Название: Re: Посоветуйте вычислитель :) Отправлено: burunduk от Ноябрь 12, 2007, 16:44 спасибо за советы
эх, нада обновляться, у меня ещё нету этих классов (Qt 4.2.2) Название: Re: Посоветуйте вычислитель :) Отправлено: Barmaglodd от Ноябрь 13, 2007, 12:23 Зачем писать самому, если есть море готовых встраиваемых скриптовых движков? Сам использовал Lua. Интегрируется просто и быстро, Qt обновлять не надо.
Название: Re: Посоветуйте вычислитель :) Отправлено: Kainit от Ноябрь 13, 2007, 12:41 Писать самому чтобы понять как оно работает в принципе. Готовые скриптовые языки нацелены на широкий круг задач и потому, если вам надо вычислять значение функции миллион раз (каждый раз меняется одна из меременных), то собственнописанный движок будет работать на порядки быстрее.
LUA - прелесть. Сам с Qt приложениями не использовал, а вот отдельно очень даже. Надо будет и мне попробовать. Qt обновлять надо, чтобы не изобретать велосипеды и всё было code less. Они там не зря постоянно новые версии выпускают. |