Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Сокровищница
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  04:53[Войти] | [Зарегистрироваться]

Парсер математических выражений. Быстрое вычисление выражений и массива выражений

Юрий Писарев
дата публикации 03-06-2012 08:49

Вступление

Компоненты рассчитывают математические и логические выражения (формулы) и доступны для Delphi 5, Delphi 6, Delphi 7, Delphi 2005, Delphi 2006, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2. Они просты в использовании и, например, содержат много методов, которые имеют один параметр — формулу и возвращают число — результат вычисления формулы (AsByte, AsInteger, AsBoolean, и т.д.). Упомянутые методы работают быстро и их можно вызывать в цикле.

Краткий обзор:

  • Компоненты предназначены для расчета математических и логических формул и работают быстро. Максимальная скорость расчета простейшего выражения более 10 миллионов вычислений в секунду. Сложные формулы вычисляются медленнее, например, для формулы типа X * 2 + Y * 2 скорость расчета составляет около 3 миллионов вычислений в секунду;
  • Существует два основных компонента — TParser и TCalculator. Оба рассчитывают выражения. Первый содержит много низкоуровневых методов и полезен, например, если вы собираетесь регистрировать новые функции или же каким-то иным образом расширять его функциональность. TCalculator агрегирует TParser и по своей сути проще в использовании, а также позволяет отойти от ненужного понимания внутренних механизмов работы компонентов;
  • Компоненты вычисляют массивы выражений. Быстро. Например, для расчета массива выражений можно использовать в цикле функцию AsInteger(const Fromula: string): Integer;
  • Компоненты переводят формулу в байт-код в буквальном смысле этого слова — TScript = Types.TByteDynArray. Все вычисления производятся по байт-коду;
  • Числа, указанные в формуле, хранятся именно в том формате, которому они соответствует. Например, в формуле "2 * 2" тип обоих числа будет определен как Byte. И именно в формате Byte эти числа будут храниться и в формате Byte принимать участие в расчете. А если, например, вы напишете "(Integer 2) * 2.0", то типа первого числа будет определен как Integer, а второго — как Double;
  • Компоненты позволяют преобразовывать байт-код обратно в формулу;
  • Компоненты при необходимости упрощают байт-код. Например, формула "(2 + 2) * (Random 2 + 2 * 2)" в результате оптимизации (упрощения) станет "4 * (Random 2 + 4)". Оптимизация это процесс преобразования байт-кода (а не текстовой формулы), который проходит с высокой скоростью;
  • Компонент TParser содержит несколько наборов кэш-памяти. Процесс компиляции достаточно трудоемок и гораздо быстрее получить байт-код из какого-нибудь кэша. Например, один тип кэш-памяти запоминает выражения, которые были вычислены и если позже требуется вычислить такое же точно выражение, то байт-код берется из хранилища памяти. А другого типа кэш-память запоминает структуру байт-кода, в которой числа теряют значение. Если, например, вы вычисляете выражение "2 * 2", то кэш преобразовывает его в "? * ?", где вместо знака вопроса может быть любое число. Позже, например, если вы вычисляете выражение "3 * 3", то байт-код предоставляется хранилищем памяти;
  • Компонент TCalculator содержит еще один уровень кэш-памяти;
  • Компоненты легко использовать. Чтобы начать ими пользоваться, достаточно просто посмотреть несколько примеров.

Пример вычисления математического выражения:

var
  Value: Double;
begin
  Value := Calculator.AsDouble('2 * 2');

Пример вычисления логического выражения:

var
  Value: Boolean;
begin
  Value := Calculator.AsBoolean('2 * 2 = 4');

Создание переменной MyVar, ее инициализация и использование в математическом выражении:

var
  Value: Double;
begin
  Calculator.ItemValue['MyVar'] := '2 * 2';
  Value := Calculator.AsDouble('MyVar + 1');

Использование многопоточного режима:

var
  I: Integer;
begin
  Calculator.Thread.AddText('2 * 2');
  Calculator.Thread.AddText('2 * 3');
  Calculator.Thread.AddText('2 * 4');
  Calculator.Thread.AddText('2 * 5');

  Calculator.Thread.Execute;

  // When all threads are done, Calculator.OnDone fires
  Calculator.Thread.WaitFor;

  for I := 0 to Calculator.Thread.ItemCount - 1 do
  begin

    ShowMessage(ValueToText(Calculator.Thread.Item[I].Value));

В этой статье есть масса демонстрационных программ (кстати, чтобы их запустить не требуется что-либо устанавливать и прописывать какие-либо пути — достаточно просто открыть файл проекта — .dpr), которые полностью раскрывают основные возможности компонентов.

Некоторые возможности компонентов

  • Возможна компиляция выражения в байт-код и использование полученного байт-кода в дальнейших вычислениях;
  • Возможна декомпиляция байт-кода обратно в выражение;
  • Возможно создание и использование пользовательских функций. Пользовательские функции могут быть следующих типов:
    • Функция не требующая параметров. Такая функция просто возвращает некоторый результат;
    • Функция требующая в выражении параметр перед собой;
    • Функция требующая в выражении параметр после себя;
    • Функция требующая в выражении два параметра — перед собой и после себя;
    • Функция требующая в выражении несколько параметров после себя, расположенные в круглых скобках и разделенных друг от друга запятой.
  • Возможно создание и использование пользовательских переменных;
  • Возможно создание и использование переменных, представляющих собой прямые ссылки на переменные, объявленные в вашей программе;
  • Возможно создание и использование констант;
  • Возможно создание и использование пользовательских типов данных, представляющих собой псевдонимы существующих типов данных в TParser;
  • Возможна оптимизация выражений. Оптимизация упрощает математическое выражение (если это возможно) на уровне байт-кода; результат — уменьшение размера байт-кода и увеличение скорости расчета;
  • Возможно многопоточное вычисление выражений, которое в TCalculator автоматизировано за счет наличия механизма управления встроенными потоками. Многопоточные вычисления обеспечивает лучшую производительность за счет одновременного расчета нескольких массивов выражений:
    • Возможно использование встроенных автоматических потоков;
    • Возможно управление многопоточным расчетом, в т.ч. количеством автоматических потоков и их приоритетами;
    • Возможно использование компонентов в пользовательских потоках — наследниках Classes.TThread для одновременного расчета массива выражений;
  • Возможно определение нескольких пользовательских переменных с целью создания т.н. цепочки зависимостей (любой глубины), в которой каждая переменная зависит от предыдущей;
  • Возможно подключение пользовательских списков переменных в которых каждый элемент списка представлен в виде NAME=VALUE, где NAME это имя переменной, а VALUE — значение.

Условия распространения

Компоненты распространяются в виде исходного кода. Их коммерческое использование в обязательном порядке требует согласования с автором. Любое изменение, внесенное в представленные компоненты, с последующей публикацией также требует согласования с автором. В случае некоммерческого использоваться компонентов разрешение предоставляется при условии размещения ссылки на сайт http://www.mathparser.net на веб-сайте компании.

Описание

Наилучший способ разобраться как устроены компоненты и как их можно использовать в ваших программах это изучение исходного кода демонстрационных программ. Представленный материал помимо общей информации содержит ряд примеров. Каждый такой пример состоит из минимального количества исходного кода, который отражает суть исключительно рассматриваемого вопроса.

CalcUtils

Этот модуль содержит набор самых простых методов, работающих с высокой скоростью. Чтобы их использовать, достаточно просто подключить модуль.

Методы вычисляют выражение представленное в параметре "Text" и возвращают результат вычисления (например, AsByte ("2 * 2")):

function AsByte(const Text: string): Byte;
function AsShortint(const Text: string): Shortint;
function AsWord(const Text: string): Word;
function AsSmallint(const Text: string): Smallint;
function AsLongword(const Text: string): Longword;
function AsInteger(const Text: string): Integer;
function AsInt64(const Text: string): Int64;
function AsSingle(const Text: string): Single;
function AsDouble(const Text: string): Double;
function AsExtended(const Text: string): Extended;
function AsBoolean(const Text: string): Boolean;
function AsPointer(const Text: string): Pointer;
function AsString(const Text: string): string;

Следующая функция рассчитывает значения поля в компоненте типа TDataSet. Формула находится в поле, имя которого указано в параметре FormulaFieldName, функция помещает результаты вычисления в поле, имя которого указано в параметре OutputFieldName. Если вычисления выполнены без ошибок, функция возвращает истину, иначе — ложь:

function CalcDataSet(const DataSet: TDataSet; const FormulaFieldName, OutputFieldName: string): Boolean;

TCalculator

TCalculator — это, грубо говоря, оболочка TParser, расширяющая его возможности (например, позволяет использовать автоматический многопоточный расчет), а также предоставляет разработчикам возможность отойти от использования низкоуровневых методов. По факту TCalculator агрегирует TParser и предоставляет возможность доступа к последнему.

Все вычисления выполняются двумя способами:

  • Компиляция выражения в байт-код и дальнейшее использование полученного байт-кода. Этот метод является самым быстрым и позволяет достичь максимальной скорости расчета — приблизительно 10 миллионов вычислений в секунду для самых простых формул. Для формулы типа X * 2 + Y * 2 скорость расчета составляет около 3 миллионов вычислений в секунду;
  • Непосредственный расчет текстового выражения. Означает передачу выражения без промежуточного этапа компиляции (компиляция тем не менее все равно неявно происходит) в метод каждый раз, когда требуется вычислить его значение. Этот способ медленнее, но, тем не менее, достаточно быстрый, благодаря наличию в TCalculator средств, предназначенных для повышения производительности.

TParser

TParser предназначен для расчета математических и логических выражений и содержит множество стандартных функций, так как, например, Sin (возвращает синус угла в радианах) или Sqrt (возвращает квадратный корень числа). Компонент также содержит стандартный набор типов, таких как Byte или Word, которые используются совместно с функциями, переменными, константами и числами. TParser позволяет создавать ваши собственные функции, переменные, константы и типы (AddFunction, AddVariable, AddConstant, AddType методы). Все вычисления компонент производит разбирая скрипт (байт-код) — бинарное представлении текстового выражения (формулы). То есть выражение необходимо вначале преобразовать в скрипт (StringToScript метод). Выражение не имеет ограничений по длине и количеству вложенных выражений (вложенное выражение это то, что находится в скобках в формуле). Скрипт представляет собой байт-код во всех смыслах этого слова — TScript = Types.TByteDynArray. Парсер оптимизирует выражение при необходимости (Optimize метод), а также поддерживает обратное преобразование скрипта в выражение (ScriptToString метод).

Выражения могут быть созданы с использованием операндов, функций, переменных, констант, чисел и типов.

Операнды выполняют какое либо действие с выражением:

  • +: операнд, выполняет операцию сложения;
  • -: операнд, выполняет операцию вычитания.

Функции выполняют вычисления и возвращают результат. Существует пять типов функций:

  • Функция не требующая параметров. Такая функция просто возвращает некоторый результат. Например, True функция (возвращает 1) не требует никаких параметров. Такая функция ведет себя как переменная;
  • Функция требующая в выражении параметр перед собой. Например, ! функция (возвращает факториал выражения) требует выражение перед собой;
  • Функция требующая в выражении параметр после себя. Например, Int функция (возвращает целую часть выражения) требует выражение после себя;
  • Функция требующая в выражении два параметра — перед собой и после себя. Например, ^ функция (возводит выражение в любую степень) требует оба параметра — перед собой и после себя;
  • Функция требующая в выражении несколько параметров после себя, расположенные в круглых скобках и разделенных друг от друга запятой. Например, Sum функция (возвращает сумму всех входящих параметров) требует один или более параметров.

Переменные содержат числа или ссылаются на числа в вашей программе. Константы содержат числа.

Приведенный ниже список содержит описание стандартных функций, переменных и констант:

  • *: функция, выполняет умножение;
  • /: функция, выполняет деление;
  • Succ: функция, возвращает следующее значение параметра;
  • Pred: функция, возвращает предыдущее значение параметра;
  • not: функция, выполняет битовую операцию NOT (отрицание);
  • and: функция, выполняет логическое AND двух параметров;
  • or: функция, выполняет логическое OR двух параметров;
  • xor: функция, выполняет логическое XOR двух параметров;
  • shl: функция, выполняет битовую операцию сдвиг влево параметра;
  • shr: функция, выполняет битовую операцию сдвиг вправо параметра;
  • SameValue (A: Double; B:Double; Epsilon: Double = 0): функция, возвращает True если два параметра (приблизительно) равны. Epsilon это максимальная величина на которую параметры A и B могу различаться но при этом рассматриваться как одинаковые;
  • IsZero (A: Double; Epsilon: Double = 0): функция, возвращает True если параметр A (приблизительно) равен нулю или отличается от нуля не более чем на величину параметра Epsilon;
  • If (AValue: Boolean; ATrue: Expression; AFalse: Expression): функция, в случае, если AValue — истина, возвращает ATrue, в противном случае — возвращает AFalse. Особенность функции заключается в том что вычисляется только тот параметр, значение которого возвращается; то есть, если AValue — истина, то вычисляется только ATrue; если AValue — ложь, то вычисляется только AFalse;
  • IfThen (AValue: Boolean; ATrue: Expression; AFalse: Expression): функция, в случае, если AValue — истина, вычисляет ATrue, в противном случае возвращает AFalse. Особенность функции заключается в том что вычисляются оба параметра, значения которых могут быть возвращены; то есть, каким бы ни было значение AValue, вычисляются и ATrue и AFalse;
  • EnsureRange (AValue, AMin, AMax: Double): функция, возвращает ближайшее к AValue в диапазоне AMin — AMax;
  • StrToInt (S: string): функция, конвертирует строку с целым значением в целое Integer. Поддерживает шестнадцатеричные числа с префиксов $ или 0x;
  • StrToIntDef (S: string; Default: Integer): функция, конвертирует строку с целым значением в целое Integer. В случае если преобразование не удалось, возвращает Default. Поддерживает шестнадцатеричные числа с префиксов $ или 0x;
  • StrToFloat (S: string): функция, конвертирует числовую строку в значение с плавающей точкой. Поддерживает целый формат, формат с плавающей точкой и научный (экспоненциальный) формат;
  • StrToFloatDef (S: string; Default: Double): функция, конвертирует числовую строку в значение с плавающей точкой. В случае если преобразование не удалось, возвращает Default. Поддерживает целый формат, формат с плавающей точкой и научный (экспоненциальный) формат;
  • False: функция, возвращает 0;
  • True: функция, возвращает 1;
  • =: функция, возвращает True если параметры равны;
  • <>: функция, возвращает True если параметры не равны;
  • >: функция, возвращает True если первый параметр больше второго;
  • <: функция, возвращает True если первый параметр меньше второго;
  • >=: функция, возвращает True если параметры равны или если первый параметр больше второго;
  • <=: функция, возвращает True если параметры равны или если первый параметр мельше второго;
  • GetEpsilon: функция, возвращает число Epsilon, представляющее собой разницу на которую могут различаться числа и при этом рассматриваться как одинаковые. Epsilon используется многими функциями, такими как SameValue, IsZero и т.д.;
  • SetEpsilon (Value: Double): функция, устанавливает число Epsilon, представляющее собой разницу на которую могут различаться числа и при этом рассматриваться как одинаковые. Epsilon используется многими функциями, такими как SameValue, IsZero и т.д.;
  • SetDecimalSeparat (S: string): функция, устанавливает символ, который используется для разделения целой и дробной части числа;
  • div: функция, выполняет целочисленное деление;
  • mod: функция, возвращает остаток от деления двух чисел;
  • ^: функция, возводит выражение в любую степень;
  • !: функция, возвращает факториал выражения;
  • Sqrt: функция, возвращает квадратный корень выражения;
  • Int: функция, возвращает целую часть числа;
  • Round: функция, округляет вещественное число до ближайшего целого числа;
  • RoundTo (Value: Extended; Digit: Shortint): функция, округляет вещественное число до заданного количества разрядов или заданной степени;
  • Trunc: функция, возвращает целую часть вещественного числа;
  • Abs: функция, возвращает абсолютную величину числа;
  • Frac: функция, возвращает дробную часть вещественного числа;
  • Ln: функция, возвращает натуральный логарифм выражения;
  • Lg: функция, возвращает десятичный логарифм выражения;
  • Log: функция, возвращает логарифм по указанному основанию;
  • Exp: функция, возвращает экспоненту числа;
  • Random: функция, возвращает случайное число в диапазоне 0 <= Value < 1;
  • Sin: функция, возвращает синус угла в радианах;
  • ArcSin: функция, возвращает значение арксинуса числа в радианах;
  • Sinh: функция, возвращает гиперболический синус угла;
  • ArcSinh: функция, возвращает значение гиперболического арксинуса числа;
  • Cos: функция, возвращает косинус угла в радианах;
  • ArcCos: функция, возвращает значение арккосинуса числа в радианах;
  • Cosh: функция, возвращает гиперболический косинус угла;
  • ArcCosh: функция, возвращает значение гиперболического арккосинуса числа;
  • Tan: функция, возвращает тангенс угла в радианах;
  • ArcTan: функция, возвращает значение арктангенса числа в радианах;
  • Tanh: функция, возвращает гиперболический тангенс угла;
  • ArcTanh: функция, возвращает значение гиперболического арктангенса числа;
  • Cotan: функция, возвращает котангенс угла в радианах;
  • ArcCotan: функция, возвращает значение арккотангенса числа в радианах;
  • Cotanh: функция, возвращает гиперболический котангенс угла;
  • ArcCotanh: функция, возвращает значение гиперболического арккотангенса числа;
  • Sec: функция, возвращает секанс угла в радианах;
  • ArcSec: функция, возвращает значение арксеканса числа в радианах;
  • Sech: функция, возвращает гиперболический секанс угла;
  • ArcSech: функция, возвращает значение гиперболического арксеканса числа;
  • Csc: функция, возвращает косеканс угла в радианах;
  • ArcCsc: функция, возвращает значение арккосеканса числа в радианах;
  • Csch: функция, возвращает гиперболический косеканс угла;
  • ArcCsch: функция, возвращает значение гиперболического арккосеканса числа;
  • ArcTan2 (Y, X: Double): функция, вычисляет ArcTan(Y/X) и возвращает значение угла в радианах с учетом квадранта в диапазоне -Pi — Pi. Значения X и Y не должны выходить за пределы диапазона -2^64 — 2^64, а также значение Х не должно быть равным 0;
  • Hypot (X, Y: Double): функция, вычисляет длину гипотенузы прямоугольного треугольника с заданной длиной двух сторон x и y. Вызов Hypot эквивалентен следующему: Sqrt (X ^ 2 + Y ^ 2);
  • RadToDeg: функция, преобразует величину в радианах в градусы;
  • RadToGrad: функция, преобразует величину в радианах в десятичные градусы;
  • RadToCycle: функция, преобразует величину в радианах в циклы;
  • DegToRad: функция, преобразует величину в градусах в радианы;
  • DegToGrad: функция, преобразует величину в градусах в десятичные градусы;
  • DegToCycle: функция, преобразует величину в градусах в циклы;
  • GradToRad: функция, преобразует величину в десятичных градусах в радианы;
  • GradToDeg: функция, преобразует величину в десятичных градусах в градусы;
  • GradToCycle: функция, преобразует величину в десятичных градусах в циклы;
  • CycleToRad: функция, преобразует величину в циклах в радианы;
  • CycleToDeg: функция, преобразует величину в циклах в градусы;
  • CycleToGrad: функция, преобразует величину в циклах в десятичные градусы;
  • LnXP1: функция, возвращает натуральный логарифм ln(X+1);
  • Log10: функция, возвращает логарифм числа по основанию 10;
  • Log2: функция, возвращает логарифм числа по основанию 2;
  • IntPower (Base: Double; Exponent: Integer): функция, возводит Base в целочисленную степень;
  • Power (Base: Double; Exponent: Double): функция, возводит Base в любую степень;
  • Ldexp (X: Double; P: Double): функция, возвращает X * (2 ^ P);
  • Ceil: функция, округляет вещественное число до наименьшего целого;
  • Floor: функция, округляет вещественное число до наибольшего целого;
  • Poly (X: Double; Coefficients(1)..Coefficients(N): Double): функция, возвращает однородный полином;
  • Mean (Data(1)..Data(N): Double): функция, возвращает среднее число из всех значений массива;
  • Sum (Data(1)..Data(N): Double): функция, возвращает сумму всех значений массива;
  • SumInt (Data(1)..Data(N): Integer): функция, возвращает сумму всех значений целочисленного массива;
  • SumOfSquares (Data(1)..Data(N): Double): функция, возвращает сумму квадратов всех значений массива;
  • MinValue (Data(1)..Data(N): Double): функция, возвращает минимальное число из всех значений массива;
  • MaxValue (Data(1)..Data(N): Double): функция, возвращает максимальное число из всех значений массива;
  • MinIntValue (Data(1)..Data(N): Integer): функция, возвращает минимальное число из всех значений целочисленного массива;
  • MaxIntValue (Data(1)..Data(N): Integer): функция, возвращает максимальное число из всех значений целочисленного массива;
  • StdDev (Data(1)..Data(N): Double): функция, возвращает стандартное среднеквадратичное отклонение (квадратный корень типовой дисперсии) из всех значений массива;
  • PopnStdDev (Data(1)..Data(N): Double): функция, Функция вычисляет среднеквадратичное отклонение совокупности (квадратный корень дисперсии совокупности) из всех значений массива;
  • Variance (Data(1)..Data(N): Double): функция, возвращает выборочную дисперсию всех значений массива;
  • PopnVariance (Data(1)..Data(N): Double): функция, возвращает выборочную дисперсию всех значений массива;
  • TotalVariance (Data(1)..Data(N): Double): функция, возвращает полную дисперсию всех значений массива — сумму квадратов расстояний всех значений от их среднего арифметического;
  • Norm (Data(1)..Data(N): Double): функция, возвращает норму всех значений массива — квадратный корень из суммы квадратов всех значений;
  • RandG (Mean, StdDev: Double): функция, возвращает нормально распределенные случайные числа с заданным средним значением и среднеквадратическим отклонением;
  • RandomRange (AFrom, ATo: Integer): функция, генерирует произвольное целое число в диапазоне AFrom — ATo;
  • RandomFrom (Value(1)..Value(N): Double): функция, возвращает случайно выбранный элемент массива;
  • Pi: константа, возвращает 3.1415926535897932385;
  • Kilobyte: константа, возвращает 1024;
  • Megabyte: константа, возвращает 1048576;
  • Gigabyte: константа, возвращает 1073741824;
  • MinShortint: константа, возвращает -128;
  • MaxShortint: константа, возвращает 127;
  • MinByte: константа, возвращает 0;
  • MaxByte: константа, возвращает 255;
  • MinSmallint: константа, возвращает -32768;
  • MaxSmallint: константа, возвращает 32767;
  • MinWord: константа, возвращает 0;
  • MaxWord: константа, возвращает 65535;
  • MinInteger: константа, возвращает -2147483648;
  • MaxInteger: константа, возвращает 2147483647;
  • MinLongword: константа, возвращает 0;
  • MaxLongword: константа, возвращает 4294967295;
  • MinInt64: константа, возвращает -9223372036854775808;
  • MaxInt64: константа, возвращает 9223372036854775807;
  • MinSingle: константа, возвращает 1.4012984643248170709e-45;
  • MaxSingle: константа, возвращает 340282346638528859811704183484516925440.0;
  • MinDouble: константа, возвращает 4.9406564584124654418e-324;
  • MaxDouble: константа, возвращает 1.7976931348623157081e+308;
  • New (VariableName: string; Value: Double; Optimizable: Boolean = False): функция, возвращает True если переменная с именем VariableName успешно создана и ее значение установлено равным Value. Впоследствии переменную можно использовать в любых выражениях. Параметр Optimizable определяет возможность оптимизации переменной. В случае если параметр Optimizable равен True, переменная может быть потеряна в результате упрощения выражения — оптимизации. Параметр Optimizable может быть опущен, по умолчанию он равен False;
  • Delete (VariableName: string; RaiseError: Boolean = True): функция, возвращает True если переменная с именем VariableName успешно удалена. Функция вызывает исключение если переменная не найдена и параметр RaiseError равен True. Параметр RaiseError может быть опущен, по умолчанию он равен True;
  • Get (VariableName: string; RaiseError: Boolean = True): функция, возвращает значение переменной с именем VariableName. Функция вызывает исключение если переменная не найдена и параметр RaiseError равен True. Параметр RaiseError может быть опущен, по умолчанию он равен True;
  • Set (Name: string, Value: Double; RaiseError: Boolean = True): функция, возвращает True если переменная с именем Name найдена и ее значение установлено равным Value. Функция вызывает исключение если переменная не найдена и параметр RaiseError равен True. Параметр RaiseError может быть опущен, по умолчанию он равен True;
  • For (VariableName: string; VariableValue: Integer; LoopCondition: Boolean; LoopExpression: Expression): функция, возвращает сумму результатов выполнения выражения LoopExpression в цикле. Например: For ("A", 1, Get("A") < 10, Set("A", Get("A") + 1)). Если переменная с именем VariableName не существует, она автоматически создается и существует в течение всего времени работы цикла;
  • Repeat (LoopExpression: Expression; LoopCondition: Boolean): функция, возвращает сумму результатов выполнения выражения LoopExpression в цикле. Например: Repeat (Set("A", Get("A") + 1), Get("A") > 10). Переменная с именем VariableName должна быть определена заранее;
  • While (LoopCondition: Boolean; LoopExpression: Expression): функция, возвращает сумму результатов выполнения выражения LoopExpression в цикле. Например: While (Get("A") < 10, Set("A", Get("A") + 1)). Переменная с именем VariableName должна быть определена заранее;
  • Script (Expression (1)..Expression (N): Expression): функция, возвращает сумму результатов выполнения выражений Expression. Например: Script (2 * 2, 3 * 3). Количество выражений неограниченно.

TGraph

TGraph предназначен для построения графиков функций в декартовой и полярной системах координат. Пожалуйста, взгляните на несколько красочных графиков сделанных при помощи этого компонента (кликните мышкой скриншот для увеличения)



Специально для Королевства Delphi


К материалу прилагаются файлы:


Смотрите также материалы по темам:
[Разбор и вычисление выражений]

 Обсуждение материала [ 04-01-2017 14:40 ] 11 сообщений
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования