Содержимое архива

:: Delphi - Модули

verylongmath.zip  (22245 байт)
Посмотреть содержимое

TStas : 2006-01-28 11:13:09

Delphi - Модули

Модуль VeryLongMath.
В этом модуле определен тип: VeryLongInt - целые знаковые числа и математика для них. Это числа по модулю 100. Состоят из модуля, в котором задом наперед записаны разряды и знака (True - знак есть, т. е. число меньше нуля). Если числа не инициализированы, то ошибки не возникает, они автоматически инициализируются при обращении к функциям и им присваивается 0.

Оптимизация скорости выполнения: при переводе в строку длинна строки расчитывается сразу и устанавливается один раз. При переводе строки в число части строки только копируются. При умножении длинна результата также устанавливается один раз. Возведение в степень производится с минимальным числом умножений, см. код функции. Так, например при возведении в степень 100 будет произведено не 100, а только 8 операций умножения. Есть функция извлечения корня, которая возвращает точный ли он, а если неточный, то ближайшее целое.

TProgressEvent - процедурный тип, с помощью которого можно отображать процесс извлечения корня или вычисления НОК и НОД, а также остановить процесс. Умеет считать НОК и НОД для двух длинных чисел. При ошибках (деление на 0, корень из отрицательного числа) возбуждаются исключения.

Второй модуль - NumericParser. Использует VeryLongMath.
В этом модуле определен класс парсера. Парсер принимает строку и, возможно, процедуру TErrorEvent, с помощью которой он может указать место ошибки, если таковая возникла. Чтобы он парсил, нужно вызвать метод Parse. Понимает переменные, если создать TStrings и в свойства Objects записать длинные числа в виде TNumericObj, и записать полученный TStrings в свойство VarList. Понимает выражения двух типов - длинные числа или логичекие. Есть свойство ResultType, в котором записано, получилось ли парсить, а если - да, то каков тип выражения. Есть свойство Corrected, в котором записано, корректна ли выражение. Парсер понимает комментарии, которые находятся внутри фигурных скобок. Регистронезависим. Понимает функции Abs, Sqr, Sqrt, GCD (НОК), lcm (НОД), логические константы true и false. На основе парсера есть функция Eval, которая принимает строку и возвращает результат ее выполнения в виде строки.

Имеется тестовый проект в виде калькулятора.

Скачать

Комментарии (3) 1085 скачиваний


Archive:  verylongmath.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
      344  2006-01-25 01:05   VeryLongMath/Calculator.dpr
      428  2006-01-25 00:55   VeryLongMath/Calculator.res
     4807  2006-01-25 22:09   VeryLongMath/CalculatorUnit.dfm
     4140  2006-01-25 22:29   VeryLongMath/CalculatorUnit.pas
        0  2006-01-26 02:30   VeryLongMath/LongMath/
    36819  2006-01-25 23:21   VeryLongMath/LongMath/NumericParser.pas
    32337  2006-01-25 22:33   VeryLongMath/LongMath/VeryLOngMath.pas
     2233  2006-01-26 02:30   VeryLongMath/Read_me.txt
---------                     -------
    81108                     8 files