| Поддерживаемые функции | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Расширены
возможности вычислений введением дополнительных функций и поддержкой обращения
к элементам массивов, матриц, и к функциональным блокам. Пример: %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 уже известны]. В общем, поскольку
порядок определяется формулой, которую задал все-таки пользователь, есть
надежда, что это приемлимый вариант.
Свойство
AngleMode, определяющее единицы для тригонометрических функций.
Компонент
"Продвинутая математика" осуществляет разбор математического выражения из
параметра MathStr и предоставляет доступ пользователя к следующим встроенным
функциям и переменным:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Примеры: Draw, Calk | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||