При написании программ, в которых от пользователя требуется ввод каких-либо математических формул или выражений, перед программистом встает вопрос, как эти введенные формулы обрабатывать непосредственно в ходе работы программы? Выходов из этой ситуации несколько - либо переделывать интерфейс под какую-то конкретную форму записи формулы (что усложняет жизнь обычному пользователю, но в разы облегчает программисту), либо писать собственный парсер формул, либо искать готовые компоненты и работать с ними. Так как первый вариант решения проблемы далеко не в лучшую сторону сказывается на юзабельности и универсальности программы, а второй отнимает много времени и сил (и по-сути является "изобретением велосипеда"), то выбор логично останавливается на использовании компонентов.
В этой теме предлагаю выкладывать такие компоненты, описывать их достоинства и недостатки и выбирать лучший, в зависимости от конкретной ситуации.
В своё время я потратил много времени, чтобы найти подходящий мне простой в использовании БЕСПЛАТНЫЙ компонент, что, надо признать, оказалось задачкой не из лёгких. Тогда выбор мой пал на компонент под названием Parser10, немного опишу его.
1) Установка компонента стандартна и вроде бы никаких проблем не должна вызвать.
2) Работать с компонентом чрезвычайно просто и приятно. Основные методы:
Поддерживаются все стандартные математические операторы Паскаля. Возможно добавление новых, весь функционал подробно описан в Readme.txt и Parser10.txt в архиве с компонентом и представлен на понятном demo-примере программы, где кстати еще и наглядно можно увидеть скорость работы парсера.
Скачать компонент можно здесь.
В этой теме предлагаю выкладывать такие компоненты, описывать их достоинства и недостатки и выбирать лучший, в зависимости от конкретной ситуации.
В своё время я потратил много времени, чтобы найти подходящий мне простой в использовании БЕСПЛАТНЫЙ компонент, что, надо признать, оказалось задачкой не из лёгких. Тогда выбор мой пал на компонент под названием 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