|
|
MathParse |
| Точки входа | |
| Действия: | |
| doCalc | Вызывает процесс синтаксического разбора формулы и вычисления результата |
| doMathStr | Устанавливает строку для математического разбора методами doCalc и reCalc |
| doClear | Сбрасывает состояние ошибки: св-во PosErr принимает значение –1, а Result принимает значение Default |
| События: | |
| onResult | Происходит после успешного вычисления методом doCalc (в случае неуспеха - onError) и выдает результат в поток |
| onError | Происходит при ошибке по методу doCalc. В поток выдается целое число: 0 – соответствует синтаксической ошибке, а 1 – ошибке вычислений. Если точка не подключена, сообщение об ошибке выдается в окно Debug |
| Свойства: | |
| Result | Хранит результаты предыдущего вычисления. Если была ошибка – возвращает NULL |
| reCalc | Метод, альтернативный doCalc. Данные из потока снизу выполняют ту же функцию, что и данные входного потока в методе doCalc. Однако события onResult или onError не происходят, а результат возвращается обратно в вызвавший поток. Если произошла ошибка, возвращается NULL |
| PosErr | Номер позиции в строке (начинается с нуля) при возникновении ошибки при использовании методов doCalc и reCalc. Если последний вызов этих методов окончился успешно, хранит –1 |
| Данные: | |
| X<число> | А это и есть аргументы формулы. Используются в формуле как %<число>. Если точка не подключена, данные для нее (если, конечно, эта переменная используется в формуле) возьмутся из входного потока. Ну а если не подключены две точки, участвующие в вычислительной формуле, будет ошибка! |
| Значения параметров | |
| DataCount | Кол-во аргументов (нумеруются от %1 до %DataCount, %0 - значение результата) |
| MathStr | Вычислительная формула, установленная с самого начала, до применения метода doMathStr |
| ResultType | Тип результата. Может быть Real (по умолчанию) и Integer |
| Default | Значение результата, которое можно прочитать методом Result (или как %0 в формуле) в самом начале, или после метода doClear |
| AngleMode | Режим работы тригонометрических функций. Угловые данные могут восприниматься/возвращаться либо в радианах (по умолчанию) либо в градусах |
| Дополнительная информация и рекомендации | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Элемент поддерживает использование внешних функций, обращение к элементам массивов, матриц, к функциональным блокам. Пример: %1+2*sh(%2(3)) - первый аргумент делает вызов с точки X1, отправляя наверх данные типа NULL (т.е. ничего); второй же аргумент отправляет наверх данные (3.0) типа real и получает результат работы функционального блока, подключенного к этой точке (а он уже и используется в вычислениях). Таким функциональным блоком может быть такой же MathParse со своей формулой и подключенный к точке reCalc, либо целая схема на HiAsm. Синтаксис использования массивов и матриц аналогичен, но использует квадратные скобки: %5[2] – второй элемент массива, подключенного к точке 5; %1[%2*4, %3+1] – соответствующий элемент матрицы, подключенной к точке 1. Понятно, что в качестве аргументов функционального вызова могут стоять поноценные выражения. Поддержана возможность итеративных вычислений без внешнего элемента Memory. Можно в формуле обратиться к результату предыдущих вычислений (%0) и сбросить значение результата (перед началом операций) методом doClear в значение, определяемое свойством Default. Возможно проведение нового вычисления по запросу на нижнюю точку reCalc. При этом данные, поступившие снизу выполняют роль данных из потока при запуске вычислений методом doCalc. В общем MathParse-ы можно вертикально каскадировать, причем верхний MathParse будет вызываться нижним сколько раз, сколько потребуется в формуле. При ошибках в вычислении, кроме ее типа (Синтаксис, Вычисления), доступна позиция в исходной строке, на которой анализатор элемента отказался продолжать. Это можно прочитать с нижней точки PosErr. Следует отметить, что при наличии ошибки, событие onResult не генерируется, но onError - обязательно. После ошибки - с нижней точки Result читается NULL, а при отсутствии ошибки в предыдущем вычислении - с нижней точки PosErr читается -1 (несуществующая позиция в строке). Метод doClear сбрасывает состояние ошибки. Метод doCalc (как и reCalc) после ошибки автоматически делает doClear. Внимание! Порядок вызова верхних точек отличается от общепринятого (слева направо). Теперь он определяется только только формулой MathStr. При этом, если какой-то аргумент вызывался один раз, и он не является функциональным, то вызов производится только один раз. Это же касается и данных из потока, которые используются в качестве первого же аргумента, у которого верхняя точка свободна. Ну а функциональные вызовы (как и вызовы матриц и массивов) осуществляются столько раз, сколько встречаются в формуле. Поскольку это могут быть, например, элементы массива от разных значений индекса. Пример, демонстрирующий порядок вызова аргументов: Хотим посчитать биномальный коэффициент N!/K!/(N-K)! Для этого, например, подключаем к точке X1 - значение N, к точке X2 - значение K, а к точке X3 - функциональный блок, вычисляющий факториал. Записываем формулу: %3(%1)/%3(%2)/%3(%1-%2) При вычислении, обращения будут происходить в следующей последовательности (читайте строку слева направо): [точка X1] => [точка X3 с соответствующим аргументом] => [точка X2] => [точка X3 с соответствующим аргументом] => [точка X3 с нужным аргументом, значения с X1 и X2 уже известны]. MathParser имеет следующие встроенные математические функции:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Примеры: Draw | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||