Category Archives: .NET
Допинал наконец-то эту библиотечку. Теперь, помимо преобразования инфиксных выражений из строки в ПОЛИЗ и вычислений также можно делать обратное преобразование, а также частичную оптимизацию вычисляемого выражения за счет предвычисления констант. Это означает, что можно, к примеру, дать на вход выражение 7+1-sin((13*4)-x) и получить на выходе 8-sin(52-x). Как можно заметить, 7+1 было заменено на 8, 13*4 – на 52, и убрана лишняя пара скобок вокруг 13*4. Конфигурирование через xml сохранено, можно изобретать собственные операторы, подключать функции и экспериментировать.
См тестовое приложение, которое прилагается к архиву в директории precompiled.
Осталось только написать nant-скрипты и проверить на совместимость с .NET 2.0.
Не так давно увидел классный способ введения функции в программу (это было в какой-то институтской программе к лабораторной работе). Программа та была написана на дельфи, и при нажатии на кнопку “строить график” она создавала файл проекта .dpr, который далее компилировался в dll с одной функцией, которая и производила указанные вычисления. Оценив ущербность этого метода, загорелся написать свою реализацию разбора математических выражений ) В итоге захотелось сделать небольшую библиотечку, в которой поддерживаемые операторы и функции можно было бы добавить быстро и непринужденно. В итоге получилась компактная расширяемая либа, где добавление операции в мат аппарат может быть осуществлен внесением нескольких строчек xml-конфига и написанием класса, который будет реализовывать указанную операцию. Можно поэкспериментировать с приоритетами, сигнатурами ) Также поддерживаются тернарные операторы (как, например, ? : ), или операторы с более чем тремя операндами (какой-нибудь a ! b !! c !!! d). Тестовое приложение WinForms показывает, насколько просто пользоваться этим кодом. Конструктивные отзывы, багрепорты и предложения по улучшению – сюда. Выкладываю первую тестовую версию,
0