Mean — Функция Delphi

Mean — Функция Delphi

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

А посмотри описание математического модуля там оч много стат функций. Ед что нет и что очень огорчает нет ф-ции корреляции.
Статистические функции и процедуры
MaxIntValue — Максимальное значение в наборе целых чисел. Функция появилась в Delphi 3. ее не существует в Delphi 2
MaxValue — Максимальное значение в наборе чисел. В Delphi 2 функция возвращает минималъное значение
Mean — Среднее арифметическое для набора чисел
MeanAndStdDev — Одновременное вычисление среднего арифметического и стандартного отклонения для набора чисел. Вычисляется быстрее, чем обе величины по отдельности
MinIntValLie — Минимальное значение в наборе целых чисел. Функция появилась в Delphi 3, ее не существует в Delphi 2
MInValue — Минимальное значение в наборе чисел. В Delphi 2 функция возвращает максимальное значение
MoiiientSkewKurtosIs — Статистические моменты порядков с первого по четвертый, а также асимметрия (skew) и эксцесс (kurtosis) для набора чисел
Norm — Норма для набора данных (квадратный корень из суммы квадратов)
PopnStdDev — Выборочное стандартное отклонение. Отличается от обычного стандартного отклонения тем, что при вычислениях используется выборочное значение дисперсии, PopnVarl апсе (см. ниже)
PopnVarlance — Выборочная дисперсия. Использует «смещенную» формулу TotalVanance/n
RandG — Генерация нормально распределенных случайных чисел с заданным средним значением и
среднеквадратическим отклонением
StdDev — Среднеквадратическое отклонение для набора чисел
Sum — Сумма набора чисел
SLimsAndSquares — Одновременное вычисление суммы и суммы квадратов для набора чисел. Как и в других функциях модуля Math, обе величины вычисляются быстрее, чем по отдельности
Sumint — Сумма набора целых чисел. Функция появилась в Delphi 3, ее не существует в Delphi 2
SLimOfSquares — Сумма квадратов набора чисел
Total Variance — «Полная дисперсия» для набора чисел. Это сумма квадратов расстояний всех величин от их среднего арифметического
Variance — Выборочная дисперсия для набора чисел. Функция использует «несмещенную» формулу TotalVanапсе/ (п -1)

Еще интересуют различные распределения, которых я не вижу в Дельфи:
F-распределение
Бета-распределение
Биномиальное распределение
Вейбулла
Гамма-распределение
Геометрическое
Дискретное равномерное
Коши
Логистическое
Логнормальное
Нормальное*
Отрицательное биномиальное
Паскаля
Пуассона
Равномерное
Степенное
Стьюдента
Хи-квадрат
Экспоненциальное
Эрланга

AlexG © (15.11.04 10:20) [2]

Я тоже много-чего в Delphi невижу — всех мыслимых и немыслимых программ, занесенных в раздел DEMO.


> AlexG © (15.11.04 10:20) [2]

Для таких вещей есть спец проги а также Эксель.

//Для таких вещей есть спец проги а также Эксель.
Но нужно это все использовать в Delphi. Может есть какие-то интерфейсы и путем использования COM средств можно получить доступ к нужным функциям в известных пакетах?

У меня перед носом лежит книжка И. Гайдышева «Анализ и обработка данных. Специальный справочник». Там есть огромная куча всего, что нужно для обработки данных с примерами на C.

У меня используются только нормальное распределение, Пирсона III и распределение Крицкого-Менкеля (тот же Пирсон, только заткнутый левым концом в ноль). Так что боюсь, что такой блок тебе не поможет.

У меня есть dll для расчета уровней значимости для некоторых распределений. Исходники на паскале. Могу выслать.

Математические функции в Дельфи

Математические функции описаны в модуле Math. Этот модуль должен быть подключен к приложению оператором uses.

Таблица математических функций в Delphi:

Функция

Описание

Аргумент

Abs (X)

абсолютное значение

целое и действительное

выражение

Ceil (X)

округление донаименьшего целого

Compare

Value (A, B) сравнение двух значений

целые и действительные

выражения

DivMod (Divided,

Divisor, Result,

Remainer) целочисленное деление:Result – результат,

Remainder – остаток

EnsureRange

(AValue,

Amin,Amax) возвращает ближайшеек Avalue в диапазоне

Amin — Amax

целые и действительные

выражения

Exp(X)

экспонента

выражение

Floor (X)

округление до наиб целого,меньшего или равного

аргумента

Frac (X)

дробная часть X-Unt(X)

Frexp(X, Mantissa,

Exponent) выделяет мантиссуи показатель степени 2

Int(X)

целая часть аргумента

выражение

IntPower(X,E)

возведение Xв целую степень E: X в степени Е

Integer

IsInfinite(X)

определяет, не равенли аргумент бесконеч

выражение

IsNan (X)

определяет, не равен лиаргумент Nan – нечисловой

величине

выражение

IsZero(X, Epsilon)

определяет, не явлли аргумент от нуля

менее чем на Epsilon

целые или действ

числа

Ldepx(X,P)

умножение X на 2 в степени Р

Integer

Ln(X)

натуральный логарифм (X)

выражение

LnXP1(X)

натуральный логарифм(X+1)

Log10(X)

десятичный логарифм от X

Log2(X)

логарифм от Xпо основанию 2

LogN (N,X)

логарифм от Xпо основанию N

Max(A,B)

максимум двух чисел

int64, Single, Double

Extended

Min(A,B)

минимум двух чисел

Pi

Poly(X,C)

вычисляет полином Xс массивом коэфф С

массив Double

Power (X, E)

Функции Delphi

Стандартные функции Delphi:

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

Между значением и именем функции существует зависимость. Поэтому всякая функция может быть представлена как операнд некоторого выражения (к примеру, в инструкции присваивания). Для возведения числа в n-ую степень достаточно записать

откуда ln — функция, вычисляющая натуральный логарифм числа exp(x), exp — функция, вычисляющая экспоненту в степени x, x — число, n-ую степень которого надо найти, а n — степень числа x. Каждая функция обладает следующими характеристиками: тип значений, тип параметров.

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

Математические функции Delphi:

Библиотеки языка Delphi включаются в себя и множество математических функций:

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

где a выражает угол в градусах; 3.1415926 означает число pi. На месте константы 3.1415926 с дробной частью для достижения большей точности чаще всего пользуются стандартной именованной константой pi. Тогда выражения для угла в пересчете в радианы будет выглядеть следующим образом:

Функции преобразования Delphi:

Наиболее частое использование функций преобразования связано с инструкциями, которые обеспечивают ввод/вывод какой-либо информации. Например, для вывода значения переменной c типом real в поле вывода диалогового окна (компонент Label), нужно провести преобразование числа в строку символов, которая собственно изображает данное число. Это можно достичь, применяя функцию FloatToStr, которая заменяет значение выражения (оно указано как параметр функции) его строковым представлением.

Илон Маск рекомендует:  Некоторые секреты ip протокола

Пример.

В приведенном примере значение переменной m будете выведено в поле Label. В таблице ниже Вам будут представлены основные функции преобразования Delphi:

Применение функций Delphi:

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

Примеры.

Структура функции Delphi

Как организована инструкция функции в языке Delphi? В любом языке программирования на первом этапе описания функции указывается ее заголовок. Далее за заголовком программист описывает раздел объявления констант const (если таковы имеются), затем занимается описанием раздела объявления типов type, далее следует раздел объявления переменных var и, наконец, раздел инструкций.

В приведенном примере в заголовке функции вначале указывается зарезервированное слово function, а следом идет имя функции. Далее в скобках программист перечисляет список параметров, и вслед за ним, используя символ «:», указывает тип значения функции. В конце каждого заголовка стоит символ «;». После заголовка следуют раздел констант, раздел типов, раздел переменных. Внутри раздела инструкций кроме констант и переменных, описанных соответственно в разделах const и var, может находится переменная result.

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

Math — математика, статистика, финансы. Краткий справочник по функциям в Delphi

Тригонгометрические функции:

function ArcCos(X: Extended): Extended;
function ArcSin(X: Extended): Extended;
function ArcTan2(Y, X: Extended): Extended; Арктангенс X/Y возвращает угол в квадранте
procedure SinCos(Theta: Extended; var Sin, Cos: Extended) register; возвращает сразу и синус и косинус, вычисления в 2 раза быстрее чем Sin, Cos по отдельности
function Tan(X: Extended): Extended;
function Cotan(X: Extended): Extended;
function Hypot(X, Y: Extended): Extended; Возвращает значение гипотенузы по катетам

Конвертация углов

function DegToRad(Degrees: Extended): Extended;
function RadToDeg(Radians: Extended): Extended;
function GradToRad(Grads: Extended): Extended;
function RadToGrad(Radians: Extended): Extended;
function CycleToRad(Cycles: Extended): Extended;
function RadToCycle(Radians: Extended): Extended;

function Cosh(X: Extended): Extended;
function Sinh(X: Extended): Extended;
function Tanh(X: Extended): Extended;
function ArcCosh(X: Extended): Extended;
function ArcSinh(X: Extended): Extended;
function ArcTanh(X: Extended): Extended;

Логарифмы, экспоненты и возведение в степень

function LnXP1(X: Extended): Extended; — натуральный логариф x+1 (для более высокой точности при x близких к нулю)
function Log10(X: Extended): Extended; — десятичный логарифм
function Log2(X: Extended): Extended; — логарифм по основанию 2
function LogN(Base, X: Extended): Extended; — логарифм по произвольному основанию
function IntPower(Base: Extended; Exponent: Integer): Extended register;
function Power(Base, Exponent: Extended): Extended;

procedure Frexp(X: Extended; var Mantissa: Extended; var Exponent: Integer) register; — возвращает мантису и экспоненту
function Ldexp(X: Extended; P: Integer): Extended register; — возвращает X*2**P
function Ceil(X: Extended):Integer; — округляет до ближайшего большего целого
function Floor(X: Extended): Integer; — округляет до ближайшего меньшего целого
function Poly(X: Extended; const Coefficients: array of Double): Extended; вычисление полинома

Статистические функции

function Mean(const Data: array of Double): Extended; среднее арифметическое
function Sum(const Data: array of Double): Extended register; сумма ряда
function SumInt(const Data: array of Integer): Integer register; сумма ряда целых чисел
function SumOfSquares(const Data: array of Double): Extended; сумма квадратов
procedure SumsAndSquares(const Data: array of Double; var Sum, SumOfSquares: Extended) register; сумма и сумма квадратов одной функцией
function MinValue(const Data: array of Double): Double; минимальное значение в ряду
function MinIntValue(const Data: array of Integer): Integer; минимальное значение в ряду целых
function Min(A,B) минимальное значение из 2х чисел (overload функции для Integer, Int64, Single, Double, Extended)
function MaxValue(const Data: array of Double): Double;
function MaxIntValue(const Data: array of Integer): Integer;
function Max(A,B);
function StdDev(const Data: array of Double): Extended; стандартное отклонение
procedure MeanAndStdDev(const Data: array of Double; var Mean, StdDev: Extended); — среднее арифметическое и стандартное отклонение
function PopnStdDev(const Data: array of Double): Extended; распределение стандартного отклонения (Population Standard Deviation)
function Variance(const Data: array of Double): Extended;
function PopnVariance(const Data: array of Double): Extended; (Population Variance)
function TotalVariance(const Data: array of Double): Extended;
function Norm(const Data: array of Double): Extended; среднее квадратичное (Sqrt(SumOfSquares))
procedure MomentSkewKurtosis(const Data: array of Double;
var M1, M2, M3, M4, Skew, Kurtosis: Extended); основные статистические моменты
function RandG(Mean, StdDev: Extended): Extended; — случайные числа с Гауссовским распределением

function DoubleDecliningBalance(Cost, Salvage: Extended; Life, Period: Integer): Extended;
function FutureValue(Rate: Extended; NPeriods: Integer; Payment, PresentValue: Extended; PaymentTime: TPaymentTime): Extended;
function InterestPayment(Rate: Extended; Period, NPeriods: Integer; PresentValue,
FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function InterestRate(NPeriods: Integer;
Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function InternalRateOfReturn(Guess: Extended;
const CashFlows: array of Double): Extended;
function NumberOfPeriods(Rate, Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime): Extended;
function NetPresentValue(Rate: Extended; const CashFlows: array of Double;
PaymentTime: TPaymentTime): Extended;
function Payment(Rate: Extended; NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function PeriodPayment(Rate: Extended; Period, NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function PresentValue(Rate: Extended; NPeriods: Integer;
Payment, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;
function SLNDepreciation(Cost, Salvage: Extended; Life: Integer): Extended;
function SYDDepreciation(Cost, Salvage: Extended; Life, Period: Integer): Extended;

Mean — Функция Delphi

Maths Routines In Delphi

  • const< Ranges of the IEEE floating point types, including denormals >
    MinSingle = 1.5e-45;
    MaxSingle = 3.4e+38;
    MinDouble = 5.0e-324;
    MaxDouble = 1.7e+308;
    MinExtended = 3.4e-4932;
    MaxExtended = 1.1e+4932;
    MinComp = -9.223372036854775807e+18;
    MaxComp = 9.223372036854775807e+18;
  • All angle parameters and results of trig functions are in radians.

Most of the following trig and log routines map directly to Intel 80387 FPU
floating point machine instructions. Input domains, output ranges, and
error handling are determined largely by the FPU hardware.
Routines coded in assembler favor the Pentium FPU pipeline architecture.
———————————————————————

Trigonometric functions
function ArcCos(X: Extended): Extended; < IN: |X| 0 OUT: [-PI..PI] radians >
function ArcTan2(Y, X: Extended): Extended;

< IntPower: Raise base to an integral power. Fast. >
function IntPower(Base: Extended; Exponent: Integer): Extended register;

< Power: Raise base to any power.
For fractional exponents, or |exponents| > MaxInt, base must be > 0. >
function Power(Base, Exponent: Extended): Extended;

< Frexp: Separates the mantissa and exponent of X. >
procedure Frexp(X: Extended; var Mantissa: Extended; var Exponent: Integer) register;

< Ldexp: returns X*2**P >
function Ldexp(X: Extended; P: Integer): Extended register;

Common commercial spreadsheet macro names for these statistical and
financial functions are given in the comments preceding each function.
———————————————————————

< Sum: Sum of values. (SUM) >
function Sum(const Data: array of Double): Extended register;
function SumInt(const Data: array of Integer): Integer register;
function SumOfSquares(const Data: array of Double): Extended;
procedure SumsAndSquares(const Data: array of Double;
var Sum, SumOfSquares: Extended) register;

< MinValue: Returns the smallest signed value in the data array (MIN) >
function MinValue(const Data: array of Double): Double;
function MinIntValue(const Data: array of Integer): Integer;

function Min(A,B: Integer): Integer; overload;
function Min(A,B: Int64): Int64; overload;
function Min(A,B: Single): Single; overload;
function Min(A,B: Double): Double; overload;
function Min(A,B: Extended): Extended; overload;

< MaxValue: Returns the largest signed value in the data array (MAX) >
function MaxValue(const Data: array of Double): Double;
function MaxIntValue(const Data: array of Integer): Integer;

function Max(A,B: Integer): Integer; overload;
function Max(A,B: Int64): Int64; overload;
function Max(A,B: Single): Single; overload;
function Max(A,B: Double): Double; overload;
function Max(A,B: Extended): Extended; overload;

< MeanAndStdDev calculates Mean and StdDev in one call. >
procedure MeanAndStdDev(const Data: array of Double; var Mean, StdDev: Extended);

< Population Standard Deviation (STDP): Sqrt(PopnVariance).
Used in some business and financial calculations. >
function PopnStdDev(const Data: array of Double): Extended;

< Total Variance: SUM(i=1,N)[(X(i) - Mean)**2] >
function TotalVariance(const Data: array of Double): Extended;

< MomentSkewKurtosis: Calculates the core factors of statistical analysis:
the first four moments plus the coefficients of skewness and kurtosis.
M1 is the Mean. M2 is the Variance.
Skew reflects symmetry of distribution: M3 / (M2**(3/2))
Kurtosis reflects flatness of distribution: M4 / Sqr(M2) >
procedure MomentSkewKurtosis(const Data: array of Double;
var M1, M2, M3, M4, Skew, Kurtosis: Extended);

< RandG produces random numbers with Gaussian distribution about the mean.
Useful for simulating data with sampling errors. >
function RandG(Mean, StdDev: Extended): Extended;

From the point of view of A, amounts received by A are positive and
amounts disbursed by A are negative (e.g. a borrower’s loan repayments
are regarded by the borrower as negative).

Interest rates are per payment period. 11% annual percentage rate on a
loan with 12 payments per year would be (11 / 100) / 12 = 0.00916667

type
TPaymentTime = (ptEndOfPeriod, ptStartOfPeriod);

< Double Declining Balance (DDB) >
function DoubleDecliningBalance(Cost, Salvage: Extended;
Life, Period: Integer): Extended;

< Future Value (FVAL) >
function FutureValue(Rate: Extended; NPeriods: Integer; Payment, PresentValue:
Extended; PaymentTime: TPaymentTime): Extended;

< Interest Payment (IPAYMT) >
function InterestPayment(Rate: Extended; Period, NPeriods: Integer; PresentValue,
FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

< Interest Rate (IRATE) >
function InterestRate(NPeriods: Integer;
Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

< Internal Rate of Return. (IRR) Needs array of cash flows. >
function InternalRateOfReturn(Guess: Extended;
const CashFlows: array of Double): Extended;

< Number of Periods (NPER) >
function NumberOfPeriods(Rate, Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime): Extended;

< Net Present Value. (NPV) Needs array of cash flows. >
function NetPresentValue(Rate: Extended; const CashFlows: array of Double;
PaymentTime: TPaymentTime): Extended;

< Payment (PAYMT) >
function Payment(Rate: Extended; NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

< Period Payment (PPAYMT) >
function PeriodPayment(Rate: Extended; Period, NPeriods: Integer;
PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

< Present Value (PVAL) >
function PresentValue(Rate: Extended; NPeriods: Integer;
Payment, FutureValue: Extended; PaymentTime: TPaymentTime): Extended;

< Straight Line depreciation (SLN) >
function SLNDepreciation(Cost, Salvage: Extended; Life: Integer): Extended;

< Sum-of-Years-Digits depreciation (SYD) >
function SYDDepreciation(Cost, Salvage: Extended; Life, Period: Integer): Extended;

<: returns the sum of square difference of
an Array of Extended Reals from a given Value >
function SumSqDiffEArray (const B: array of Extended; Diff: Extended): Extended;

<: returns the sum of pairwise product two
Arrays of Extended Reals >
function SumXYEArray (const X, Y: array of Extended): Extended;

<: returns npr i.e permutation of r objects from n.
Only values of N up to 1547 are handled returns 0 if larger
If R > N then 0 is returned >
function PermutationX (N, R: Cardinal): Extended;

<: returns ncr i.e combination of r objects from n.
These are also known as the Binomial Coefficients
Only values of N up to 1547 are handled returns 0 if larger
If R > N then 0 is returned >

function BinomialCoeff (N, R: Cardinal): Extended;

<: returns true if all elements of x>ESBTolerance >
function IsPositiveEArray (const X: array of Extended): Boolean;

<: returns the geometric mean of values>
function GeometricMean (const X: array of Extended): Extended;

<: returns the harmonic mean of values>
function HarmonicMean (const X: array of Extended): Extended;

<: returns the arithmetic mean of values>
function ESBMean (const X: array of Extended): Extended;

<: returns the variance of values, assuming a sample.
Square root this value to get Standard Deviation >
function SampleVariance (const X: array of Extended): Extended;

<: returns the variance of values, assuming a population.
Square root this value to get Standard Deviation >
function PopulationVariance (const X: array of Extended): Extended;

<: returns the mean and variance of values, assuming a sample.
Square root the Variance to get Standard Deviation >
procedure SampleVarianceAndMean (const X: array of Extended;
var Variance, Mean: Extended);

<: returns the mean and variance of values, assuming a population.
Square root the Variance to get Standard Deviation >
procedure PopulationVarianceAndMean (const X: array of Extended;
var Variance, Mean: Extended);

<: returns the median (2nd quartiles) of values. array
MUST be sorted before using this operation >
function GetMedian (const SortedX: array of Extended): Extended;

<: returns the mode (most frequent) of values. array
MUST be sorted before using this operation. Function is False
if no Mode exists >
function GetMode (const SortedX: array of Extended; var Mode: Extended): Boolean;

<: returns the 1st and 3rd quartiles - median is 2nd of values.
The array MUST be sorted before using this operation >
procedure GetQuartiles (const SortedX: array of Extended; var Q1, Q3: Extended);

Функции delphi

Здравствуй, дорогой читатель. Сегодня я планирую рассказать о таком значимом элементе программирования как функции. А если быть точным, будем разбирать функции Delphi.

Начнем с общего определения:

Функция – фрагмент программного кода, который имеет свое имя. По этому имени данный фрагмент можно вызвать из любого места программы. Результатом выполнения функции Delphi является значение.

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

Давайте разберем как определить функцию.

Итак, в начале идет ключевое слово function, затем имя функции. Далее в круглых скобках список параметров. Также необходимо указать тип возвращаемого результата. При необходимости можно определить локальные переменные. Между операторных скобок (begin..end;) необходимо записать требуемые инструкции.

В каждой функции Delphi автоматически создает переменную с именем result, переменная имеет тот же тип, что и возвращаемое значение функции. С помощью этой переменной мы и будем возвращать значения. (Есть еще одна возможность вернуть значение, её я продемонстрирую на примере).

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

Разберем применение функций Делфи на простом примере.

Создайте новое приложение и на форме разместите три кнопки (Button).

Далее откройте код и будем писать функцию, цель которой будет возвращать квадрат числа. Описание у нас будет вне класса после строк:

Сама же функция будет иметь следующий вид:

Название – square, параметр всего один – x типа Double, результат тоже будет Double.

Делфи позволяет возвращать значения через переменную, название которой совпадает с названием функции Delphi. В нашем случае это выглядит так: square:=x*x;(закомментированный код).

Теперь посмотрим как можно использовать написанный код. Напишем обработчик события Onclickдля каждой из кнопок.

  • Для первой кнопки — ShowMessage(FloatToStr(square(1)));
  • Для второй — ShowMessage(FloatToStr(square(2)));
  • Для третей — ShowMessage(FloatToStr(square(3)));

У меня получился следующий Unit

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

Подведем итог. Функции делают разработку на Делфи проще и быстрее, код читабельнее, правку проще. Используйте фунуции Delphi.

Математические функции в Delphi

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

Для работы с этими функциями, в разделе описания uses нужно указать математическую библиотеку Math:

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

Calling Procedures and Functions (Delphi)

This topic covers the following items:

  • Program control and routine parameters
  • Open array constructors
  • The inline directive

Contents

Program Control and Parameters

When you call a procedure or function, program control passes from the point where the call is made to the body of the routine. You can make the call using the declared name of the routine (with or without qualifiers) or using a procedural variable that points to the routine. In either case, if the routine is declared with parameters, your call to it must pass parameters that correspond in order and type to the parameter list of the routine. The parameters you pass to a routine are called actual parameters, while the parameters in the declaration of the routine are called formal parameters.

When calling a routine, remember that:

  • expressions used to pass typed const and value parameters must be assignment-compatible with the corresponding formal parameters.
  • expressions used to pass var and out parameters must be identically typed with the corresponding formal parameters, unless the formal parameters are untyped.
  • only assignable expressions can be used to pass var and out parameters.
  • if the formal parameters of a routine are untyped, numerals and true constants with numeric values cannot be used as actual parameters.

When you call a routine that uses default parameter values, all actual parameters following the first accepted default must also use the default values; calls of the form SomeFunction(,,X) are not legal.

You can omit parentheses when passing all and only the default parameters to a routine. For example, given the procedure:

the following calls are equivalent:

Open Array Constructors

Open array constructors allow you to construct arrays directly within function and procedure calls. They can be passed only as open array parameters or variant open array parameters.

An open array constructor, like a set constructor, is a sequence of expressions separated by commas and enclosed in brackets.

For example, given the declarations:

you could call the Add procedure with the statement:

This is equivalent to:

Open array constructors can be passed only as value or const parameters. The expressions in a constructor must be assignment-compatible with the base type of the array parameter. In the case of a variant open array parameter, the expressions can be of different types.

Using the inline Directive

The Delphi compiler allows functions and procedures to be tagged with the inline directive to improve performance. If the function or procedure meets certain criteria, the compiler will insert code directly, rather than generating a call. Inlining is a performance optimization that can result in faster code, but at the expense of space. Inlining always causes the compiler to produce a larger binary file. The inline directive is used in function and procedure declarations and definitions, like other directives.

The inline directive is a suggestion to the compiler. There is no guarantee the compiler will inline a particular routine, as there are a number of circumstances where inlining cannot be done. The following list shows the conditions under which inlining does or does not occur:

  • Inlining will not occur on any form of late-bound method. This includes virtual, dynamic, and message methods.
  • Routines containing assembly code will not be inlined.
  • Constructors and destructors will not be inlined.
  • The main program block, unit initialization, and unit finalization blocks cannot be inlined.
  • Routines that are not defined before use cannot be inlined.
  • Routines that take open array parameters cannot be inlined.
  • Code can be inlined within packages, however, inlining never occurs across package boundaries.
  • No inlining is done between units that are circularly dependent. This includes indirect circular dependencies, for example, unit A uses unit B, and unit B uses unit C which in turn uses unit A. In this example, when compiling unit A, no code from unit B or unit C will be inlined in unit A.
  • The compiler can inline code when a unit is in a circular dependency, as long as the code to be inlined comes from a unit outside the circular relationship. In the above example, if unit A also used unit D, code from unit D could be inlined in A, since it is not involved in the circular dependency.
  • If a routine is defined in the interface section and it accesses symbols defined in the implementation section, that routine cannot be inlined.
  • If a routine marked with inline uses external symbols from other units, all of those units must be listed in the uses statement, otherwise the routine cannot be inlined.
  • Procedures and functions used in conditional expressions in whiledo and repeatuntil statements cannot be expanded inline.
  • Within a unit, the body for an inline function should be defined before calls to the function are made. Otherwise, the body of the function, which is not known to the compiler when it reaches the call site, cannot be expanded inline.

If you modify the implementation of an inlined routine, you will cause all units that use that function to be recompiled. This is different from traditional rebuild rules, where rebuilds were triggered only by changes in the interface section of a unit.

The <$INLINE>compiler directive gives you finer control over inlining. The <$INLINE>directive can be used at the site of the inlined definition of the routine, as well as at the call site. Below are the possible values and their meaning:

Илон Маск рекомендует:  Что такое код cpdf_page_init
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL