Author Archives: elwood
Допинал наконец-то эту библиотечку. Теперь, помимо преобразования инфиксных выражений из строки в ПОЛИЗ и вычислений также можно делать обратное преобразование, а также частичную оптимизацию вычисляемого выражения за счет предвычисления констант. Это означает, что можно, к примеру, дать на вход выражение 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 показывает, насколько просто пользоваться этим кодом. Конструктивные отзывы, багрепорты и предложения по улучшению – сюда. Выкладываю первую тестовую версию,
Сегодня неторопясь допинал свой курсач по ОСям. Задание, кстати, было весьма интересное, за мои 2.5 года в институте такое впервые ) А именно наваять чекер листов прокси, на нативных функциях Win32 и с применением многопоточности. Требования очень простые – на входе текстовик с HTTP проксиками, на выходе – такой же, но составленный только из работающих и отсортированный по возрастанию времени отклика + возможность определять, являются ли проверенные прокси транспарентными, либо все-таки скрывают истинный IP. Реализация не сложная, на C++ с использованием виндовых сокетов (сначала пробовал wininet, но оказалось, что он имеет нехорошую способность иногда намертво подвисать, причем поток после этого ведет себя неадекватно). Так что самым оптимальным решением, на мой взгляд, было использование winsock для работы с сокетами в неблокирующем режиме. Появилась возможность самим управлять таймаутом операции, а следовательно, и предотвратить случаи некорректной работы потоков.
При реализации обнаружил интересную задачу, связанную с функциями переменного числа аргументов. Вкратце, она сводилась к тому, чтобы написать свой переходник для printf(char *format, …) – с блекджеком и шлюхами, естественно, скажем, вида LogMessage(char *format, …) – так, чтобы внутренности этого переходника вызывали printf с теми же параметрами. Возможно, стоит написать об этом отдельный пост, а пока просто сообщу, что один способ я нашел и он лежит внутри. 🙂 Не самое лучшее решение, опять же, но для сельской местности сойдет.
К сему прилагаются бинарники и исходники:
Download
0