![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
TMathExpression - компонент для синтаксического анализаDelphi , Синтаксис , МатематикаTMathExpression - компонент для синтаксического анализаАвтор: Виталий Бабичев Уважаемые жители, для тестирования предлагается TMathExpression — компонент, предназначенный для синтаксического анализа и расчета математических выражений. Компонент тестировался под Delphi5. Для тестирования предлагается Demo-версия, в которой есть ограничения на количество обрабатываемых формул (не более 10). ВСЕМ, кто примет активное участие в тестировании и даст конкретные предложения по качественному улучшению работы компонента, хелпа к нему или демонстрационной программы, проект будет предоставлен БЕЗ ОГРАНИЧЕНИЙ. Основные возможности
![]() Компонент предназначен для синтаксического анализа и расчета математических выражений. Выражение - арифметическое выражение, состоящее из имен формул, констант и пользовательских функций. Математические выражения могут быть взяты из любого источника данных (таблица, текстовый файл, лист MSExcel и т.д.). Проще всего если источником данных является таблица, потому что метод FillExpression формирует список формул из указанной таблицы. Если источником данных является не таблица, то для формирования списка формул надо воспользоваться методом AddExpression. Формула - поименованное выражение, т.е. любому выражению может быть присвоено имя, и это имя может быть вставлено в другое выражение. Это сделано для исключения повторного вычисления. Допустим, у Вас есть несколько одинаковых кусочков выражения. Вы выделяете этот кусочек в отдельное выражение и именуете его. А в другие выражения вставляете наименование этой формулы. При вычислениях формула будет посчитана один раз. А там, где в выражениях встречается это наименование формулы, будет проставлен результат. Это экономит время расчета. Функции это тот механизм, ради которого и создавался компонент TMathExpression. У компонента TMathExpression есть свойство-коллекция TFunctions, она и содержит список пользовательских функций с их реализацией. В связи с тем, что функции участвуют в выражениях, они обязательно должны возвращать число. В принципе функции могут делать что угодно (что-то вычислить, обнулить какие-то параметры или даже закрыть какое-нибудь приложение и т.д.), но как результат - возвратить число. Функции могут быть четырех типов (т.е. их параметры могут быть четырех типов):
ОБРАБОТКА ОШИБОК В связи с тем, что в выражения могут быть вставлены наименования формул, синтаксический анализатор проверяет дополнительно ситуацию зацикливания.Что же это такое зацикливание? Допустим, у Вас есть три формулы: Formula1=Formula2+1 Formula2=Formula3-1 Formula3=Formula1Обратите внимание, что Formula1 ссылается на Formula2, Formula2 ссылается на Formula3, а Formula3 в свою очередь ссылается на Formula1. Образуется замкнутая цепочка, из которой не понятно как производить вычисления, хотя синтаксически все написано правильно. Вот это и называется зацикливанием. При ее возникновении, синтаксический анализатор выдает сообщение об ошибке и выводит всю замкнутую цепочку. Все примеры использования приведены в демонстрационной программе. Буду рад выслушать все замечания и предложения. Скачать проект: MathExpr.zip (98 K) Компонент TMathExpression предназначен для синтаксического анализа и расчета математических выражений, позволяя пользователям создавать пользовательские функции с различными типами параметров. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |