Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

[Бесплатные] Парсеры математических выражений

Страницы: 1
[Бесплатные] Парсеры математических выражений
При написании программ, в которых от пользователя требуется ввод каких-либо математических формул или выражений, перед программистом встает вопрос, как эти введенные формулы обрабатывать непосредственно в ходе работы программы? Выходов из этой ситуации несколько - либо переделывать интерфейс под какую-то конкретную форму записи формулы (что усложняет жизнь обычному пользователю, но в разы облегчает программисту), либо писать собственный парсер формул, либо искать готовые компоненты и работать с ними. Так как первый вариант решения проблемы далеко не в лучшую сторону сказывается на юзабельности и универсальности программы, а второй отнимает много времени и сил (и по-сути является "изобретением велосипеда"), то выбор логично останавливается на использовании компонентов.

В этой теме предлагаю выкладывать такие компоненты, описывать их достоинства и недостатки и выбирать лучший, в зависимости от конкретной ситуации.

В своё время я потратил много времени, чтобы найти подходящий мне простой в использовании БЕСПЛАТНЫЙ компонент, что, надо признать, оказалось задачкой не из лёгких. Тогда выбор мой пал на компонент под названием Parser10, немного опишу его.

1) Установка компонента стандартна и вроде бы никаких проблем не должна вызвать.
2) Работать с компонентом чрезвычайно просто и приятно. Основные методы:

Код
Parser1.X := 100; // Задание значения переменной x из формулы (возможно использовать другие переменные или даже добавлять свои)
Parser1.Y := 200; // Пример другой переменной - y
Parser1.Variable['z'] := 20; // Задание собственной переменной z
Parser1.Expression := 'sin(x)*cos(y)+z'; // Собственно само выражение, по которому будем считать результат
Parser1.Expression := Edit1.Text // Подобным образом это используется непосредственно в программе
Result := Parser1.Value; // А это готовый результат. Переменная Result вернет вычисленное значение формулы


Поддерживаются все стандартные математические операторы Паскаля. Возможно добавление новых, весь функционал подробно описан в Readme.txt и Parser10.txt в архиве с компонентом и представлен на понятном demo-примере программы, где кстати еще и наглядно можно увидеть скорость работы парсера.

Скачать компонент можно здесь.
Изменено: Андрей - 30.11.2009 20:23:26
Да, хороший компонент, а ведь многие о нем не знают предпочитая использовать стандартный TParser. Он, конечно, прекрасно вычисляет выражения содержащие только числа, однако у него есть недостаток. Дело в том, что любой символ с "+" или "-" воспринимается как число с плавающей точкой. То есть TParser прекрасно работает при виде 2e+5, однако у него возникает ошибка при виде выражения х+3. Чтобы он корректно обрабатовал выражения с переменными необходимо, чтобы после переменной и перед знаком был пробел.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)