Склонение день, дня, дней

function lastDigitToWord(digit)
{
var lastFigure = parseInt(digit.toString().substr(digit.toString().length - 1, 1));
if (digit > 11 && digit < 15) { return 'Дней'; }
else { if (lastFigure == 1) return 'День'; if (lastFigure > 1 && lastFigure < 5) return 'Дня'; if (lastFigure == 0 || lastFigure >= 5) return 'Дней';
}

}

Выполнение

var days = [10, 13, 1, 25, 2, 5, 4, 344];
var result = '';
for (var i in days)
{
result += days[i].toString() + ' - ' + lastDigitToWord(days[i]) + '\n';
}

alert(result);

Загрузка изображения или курсора из RES-файла

Загрузка изображений и курсоров из RES-файлов

Изображения и курсоры могут храниться в файлах ресурсов (RES) и прилинковываться (связаваться) к EXE-файлу вашего приложения. RES-файлы могут создаваться с помощью Delphi утилит Image Editor и Borland Resource Workshop, входящие в поставку Delphi RAD Pack. Изображения и курсоры, хранимые в RES-файлах (после упаковки их в EXE или DLL) могут быть извлечены с помощью API функций LoadBitmap и LoadCursor соответственно.

Загрузка изображений

Функция API LoadBitmap определена следующим образом:

function LoadBitmap(Instance: THandle; BitmapName: PChar): HBitmap;

Первый параметр должен содержать дескриптор модуля (EXE или DLL), содержащего файл RES, из которого вы хотите получить ресурс. Delphi хранит дескриптор запущенного EXE-файла в глобальной переменной с именем Hinstance. В приведенном ниже примере мы предполагаем, что модуль, из которого мы пытаемся загрузить изображение, — ваше приложение. Тем не менее, модуль мог бы быть другим EXE- или DLL-файлом. Следующий пример загружает изображение с именем BITMAP_1 из RES-файла, прилинкованного к EXE-файлу приложения:

procedure TForm1.Button1Click(Sender: TObject);

var

Bmp: TBitmap;

begin

Bmp := TBitmap.Create;

Bmp.Handle := LoadBitmap(HInstance,'BITMAP_1');

Canvas.Draw(0, 0, Bmp);

Bmp.Free;

end;

Имеется один недостаток использования API вызова LoadBitmap: LoadBitmap все же является API вызовом Windows 3.0, и грузит изображение только как DDB (Device Dependent Bitmaps). Это может вызвать проблемы с цветовой палитрой при загрузке DIB (Device Independent Bitmaps) из RES-файла. Приведенный ниже код может использоваться для извлечения DIB-ов из RES-файлов. Данный код загружает изображение как общий ресурс, передает его в поток, после чего делает Delphi вызов LoadFromStream, реализующий палитру автоматически.

procedure TForm1.Button1Click(Sender: TObject);

const

BM = $4D42; {Идентификатор типа изображения}

var

Bmp: TBitmap;

BMF: TBitmapFileHeader;

HResInfo: THandle;

MemHandle: THandle;

Stream: TMemoryStream;

ResPtr: PByte;

ResSize: Longint;

begin

BMF.bfType := BM;

{Ищем, загружаем и блокируем ресурс, содержащий BITMAP_1}

HResInfo := FindResource(HInstance, 'BITMAP_1', RT_Bitmap);

MemHandle := LoadResource(HInstance, HResInfo);

ResPtr := LockResource(MemHandle);

{Создаем Memory-поток, устанавливаем его размер, записываем

туда заголовок изображения и, наконец, само изображение }


Stream := TMemoryStream.Create;

ResSize := SizeofResource(HInstance, HResInfo);

Stream.SetSize(ResSize SizeOf(BMF));

Stream.Write(BMF, SizeOf(BMF));

Stream.Write(ResPtr^, ResSize);

{Освобождаем поток и сбрасываем его позицию в 0}

FreeResource(MemHandle);

Stream.Seek(0, 0);

{Создаем TBitmap и загружаем изображение из MemoryStream}

Bmp := TBitmap.Create;

Bmp.LoadFromStream(Stream);

Canvas.Draw(0, 0, Bmp);

Bmp.Free;

Stream.Free;

end;

Загрузка курсоров

Функция API LoadCursor определена следующим образом:

function LoadCursor(Instance: THandle; CursorName: PChar): HCursor;

Первый параметр Instance должен содержать дескриптор модуля, содержащего файл RES. Как и пример, приведенный выше, данный пример предполагает, что модуль, из которого мы пытаемся загрузить курсор, — ваше приложение. Второй параметр — имя курсора. В секции interface сделайте следующее объявление:

const

crMyCursor = 5; {Другие модули могут также использовать эту константу}

Затем добавьте следующие две строчки к обработчику события формы OnCreate:

procedure TForm1.FormCreate(Sender: TObject);

begin

Screen.Cursors[crMyCursor] := LoadCursor(HInstance, 'CURSOR_1');

Cursor := crMyCursor;

end;

или же вы можете изменить один из стандартных курсоров Delphi как показано ниже (константы Cursor описаны в электронной справке в статье Cursors Property):

procedure TForm1.FormCreate(Sender: TObject);

begin

{Данный пример изменяет курсор SQL Hourglass}

Screen.Cursors[crSQLWait] := LoadCursor(HInstance, 'CURSOR_1');

end;

Примечание: в нормальной ситуации необходимо удалить любые ресурсы курсоров с помощью DeleteCursor, тем не менее, в Delphi в этом нет необходимости, поскольку Delphi сама удаляет все курсоры из массива Cursors.

Загрузить RTF файл из ресурса своего EXE

Load RTF file from resource:

You can store any kind of file as a RCDATA resource.

The following example shows this with an RTF file.

Create a text file called textres.rc and put the

following line in it:

TESTDOC RCDATA «textdoc.rtf»

Next, compile that using the Borland Resource Compiler,

which is provided with Delphi.

brcc32.exe textres.rc

Your next step is to include the compiled resource (.RES) file into

your executable, which can be done with the {$R} compiler directive.

*)

implementation

{$R *.dfm}

{$R textres.res} // <---- your resource file!

procedure TForm1.Button1Click(Sender: TObject);

var

rs: TResourceStream;

begin

rs := TResourceStream.Create(hinstance, 'TESTDOC', RT_RCDATA);

try

Richedit1.PlainText := False;

TempStream.Position := 0;

Richedit1.Lines.LoadFromStream(rs);

finally

rs.Free;

end;

end;

Включение шрифта как ресурс в EXE

Включение шрифта в ваш EXE:

Используйте ваш любимый текстовый редактор, создайте *.rc файл, описывающий шрифт:

MY_FONT ANYOL1 «Bauhs93.ttf»

Первые два параметра могут быть любыми. Они будут использоваться в программе позже.

Затем для создания *.res файла используйте компилятор командной строки BRCC32.EXE, поставляемый с Delphi. Если ваш файл на этапе 1 был назван MyFont.rc, командная строка в сеансе DOS должна выглядеть так:

BRCC32 MyFont

Программа добавит в компилируемый файл созданный ресурс .rc и создаст файл с тем же именем, за исключением расширения, которое будет .res: MyFont.res

В вашей программе добавьте директиву компилятора, чтобы включить вновь созданный файл:

{$R MyFont.res}

Правильным будет разместить его в секции реализации после строчки {$R *.DFM}.

Добавьте процедуру создания файла из ресурса, делающим шрифт доступным для использования. Пример:

procedure TForm1.FormCreate(Sender: TObject);

var

Res : TResourceStream;

begin

Res := TResourceStream.Create(hInstance, 'MY_FONT', Pchar('ANYOL1'));

Res.SavetoFile('Bauhs93.ttf');

Res.Free;

AddFontResource(PChar('Bauhs93.ttf'));

SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);

end;

 

Теперь вы можете использовать данный шрифт в своем приложении:

procedure TForm1.Button1Click(Sender: TObject);

begin

Button1.Font.Name := 'Bauhaus 93';

end;

Предостережения:

Приведенный пример не предусматривает никакой проверки и защиты от возможных ошибок.

Обратите внимание — имя файла НЕ такое же, как имя шрифта. Это допускает, что вы знаете имя шрифта и имя его ttf-файла. Вы можете определить это, дважды щелкнув на файле в окне Проводника.

Я рекомендую устанавливать файл шрифта в папку C:\WINDOWS\FONTS. Его легче отыскать потом именно там.

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

procedure TForm1.FormDestroy(Sender: TObject);

begin

RemoveFontResource(PChar("Bauhs93.ttf"))

SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);

end;

 

Для получения дополнительной справки по функциям AddFontResource и RemoveFontResource загляните в электронную справку по Win32.

 

Включение wav-файла в exe и проигрывание этого wav-файла

Включение wav-файла в exe и проигрывание этого wav-файла

Зависимости: Uses MMSystem

// В файл MyWave.rc пишешь:

MyWave RCDATA LOADONCALL MyWave.wav

// Затем компилируешь

brcc32.exe MyWave.rc, получаешь MyWave.res.

// В своей программе пишешь:

{$R MyWave.res}

procedure RetrieveMyWave;

var

hResource: THandle;

pData: Pointer;

begin

hResource := LoadResource(hInstance, FindResource(hInstance, 'MyWave',

RT_RCDATA));

try

pData := LockResource(hResource);

if pData = nil then

raise Exception.Create('Cannot read MyWave');

// Здесь pData указывает на MyWave

// Теперь можно, например, проиграть его (Win32):

PlaySound(pData, 0, SND_MEMORY SND_ASYNC SND_NOSTOP);

//Для PlaySound используется модуль MMSystem}

//SND_ASYNC - при проигрывании не останавливать работу программы

//SND_NOSTOP - проиграть звук до конца

//SND_STOP - прекратить играть прежний звук и начать новый

finally

FreeResource(hResource);

end;

end;

Включение JPEG в EXE-файл 2

1) Создайте текстовый файл с расширением «.rc». Имя этого файла должно отличаться от имени файла-пректа или любого модуля проекта. Файл должен содержать строку вроде:

MYJPEG JPEG C:\DownLoad\MY.JPG

где: «MYJPEG» имя ресурса «JPEG» пользовательский тип ресурса «C:\DownLoad\MY.JPG» путь к JPEG файлу.

Пусть например rc-файл называется «foo.rc»

Запустите BRCC32.exe (Borland Resource CommandLine Compiler) — программа находится в каталоге Bin Delphi/C Builder’а — передав ей в качестве параметра полный путь к rc- файлу.

В нашем примере:

C:\DelphiPath\BIN\BRCC32.EXE C:\ProjectPath\FOO.RC

Вы получите откомпилированный ресурс — файл с расширением «.res». (в нашем случае foo.res).

Далее добавте ресурс к своему приложению.

{Грузим ресурс}

{$R FOO.RES}

uses Jpeg;

procedure LoadJPEGFromRes(TheJPEG : string; ThePicture : TPicture);

var

ResHandle : THandle;

MemHandle : THandle;

MemStream : TMemoryStream;

ResPtr : PByte;

ResSize : Longint;

JPEGImage : TJPEGImage;

begin

ResHandle := FindResource(hInstance, PChar(TheJPEG), 'JPEG');

MemHandle := LoadResource(hInstance, ResHandle);

ResPtr := LockResource(MemHandle);

MemStream := TMemoryStream.Create;

JPEGImage := TJPEGImage.Create;

ResSize := SizeOfResource(hInstance, ResHandle);

MemStream.SetSize(ResSize);

MemStream.Write(ResPtr^, ResSize);

FreeResource(MemHandle);

MemStream.Seek(0, 0);

JPEGImage.LoadFromStream(MemStream);

ThePicture.Assign(JPEGImage);

JPEGImage.Free;

MemStream.Free;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

LoadJPEGFromRes('MYJPEG', Image1.Picture);

end;

Включение JPEG в EXE-файл

Начиная с третьей версии, Delphi содержит модуль jpeg, позволяющий работать с этим форматом изображений, и у меня встала задача включить jpeg-графику в мой исполнимый файл для последующего использования в программе, но как это осуществить я пока не знаю.

Нет проблем! Выполните пять простых шагов, описанных ниже, и вы поймете все эту сложную, на первый взгляд, технологию.

Шаг первый:

Создайте файл сценария ресурса (*.RC) в обычном текстовом редакторе типа Notepad и добавьте следующую строку:

1 RCDATA «MyPic.jpg»

Первый элемент является просто индексом ресурса. Второй элемент указывает на определенный пользователем ресурс. Третий, он же последний элемент, является именем jpeg-файла.

Шаг второй:

Для компиляции ресурса в .RES-файл используйте Borland Resource Compiler, BRCC32.EXE. В командной строке MS-DOS введите:

BRCC32 MyPic.RC

Это создаст файл ресурса с именем MyPic.RES.

Шаг третий:

Добавьте директиву компилятора к исходному коду вашей программы. Она должна располагаться непосредственно за директивой формы, как показано ниже:

{$R *.DFM}

{$R MyPic.RES}

Шаг четвертый:

Добавьте следующий код к вашему проекту (для этого я создал процедуру):

procedure LoadJPEGfromEXE;

var

MyJPG: TJPEGImage; // Объект - JPEG

ResStream: TResourceStream; // Объект - поток ресурсов

begin

try

MyJPG := TJPEGImage.Create;

ResStream := TResourceStream.CreateFromID(HInstance, 1, RT_RCDATA);

MyJPG.LoadFromStream(ResStream); // Что!? Да, это просто!

Canvas.Draw(12, 12, MyJPG);

// сделайте это, чтобы увидеть что это действительно работает!

finally

MyJPG.Free;

ResStream.Free;

end;

end; // procedure

Обратили внимание на второй параметр процедуры CreateFromID объекта TResourceStream? Это просто индекс ресурса. Вы можете включить более одного jpeg-изображения в исполняемый модуль приложения, просто добавляя в .RC-файл строчку с другим индексом для каждого включаемого изображения.

Шаг пятый:

Вызовите процедуру, запустите программу и вуаля! Дело сделано.

WAV в EXE

В файл MyWave.rc пишешь:

MyWave RCDATA LOADONCALL MyWave.wav

brcc32.exe MyWave.rc, получаешь MyWave.res.

В своей программе пишешь:

{$R MyWave.res}

Все!

Предупреждая следующий твой вопрос «а как прочитать wave-файл из исполняемого файла?»

procedure RetrieveMyWave;

var

hResource: THandle;

pData: Pointer;

begin

hResource := LoadResource(hInstance, FindResource(hInstance, 'MyWave',

RT_RCDATA));

try

pData := LockResource(hResource);

if pData = nil then

raise Exception.Create('Cannot read MyWave');

// Здесь pData указывает на MyWave

// Теперь можно, например, проиграть его (Win32):

PlaySound('MyWave', 0, SND_MEMORY);

finally

FreeResource(hResource);

end;

end;

Функции для финансовых вычислений

Функция DoubleDecliningBalance (Cost, Salvage: Extended; Life, Period: Integer ): Extended;
Модуль: Math
Описание
Функция вычисляет амортизационные отчисления на определенном этапе. В качестве параметров используются: начальная стоимость Cost, срок службы Life, конечная стоимость Salvage и амортизационный период Period. Вычисления производятся по следующим формулам:
Период
Сумма амортизационных отчислений
1
А1:= Cost*2/Life
2
А2:= (Cost-А1)*2/Life
3
А3:= (Cost-А1-А2)*2/Life


n
Аn:= (Cost-А1-А2 — … — Аn-1)*2/Life,
где n=Period

При достижении конечной стоимости, амортизация перестает начисляться, и для последующих периодов функция будет возвращать значение, указанное в параметре Salvage.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"} var
A : Extended;
begin

A:=DoubleDecliningBalance(1000, 100, 5, 1); // A:=400

end;{/codecitation}


Функция FutureValue (
Rate: Extended;

NPeriods: Integer ;
Payment, PresentValue: Extended;
PaymentTime: TPaymentTime ): Extended;
Модуль: Math
Описание
Функция вычисляет значение вклада по прошествии определенного периода времени.
NPeriods — количество прошедших единиц периода времени. Например, если проценты начисляются раз в год, то данный параметр определяет количество лет.
PresentValue — первоначальная сумма вклада.
В параметре Payment указывается сумма, которая будет добавляться вкладчиком ко вкладу в течение каждой единицы периода времени. Если вклад осуществляется только один раз, то Payment:=0.
Rate — дивиденты, начисляемые за единицу периода.
Параметр PaymentTime определяет, как должны начисляться проценты:
Значение
Описание
PtStartOfPeriod
Проценты начисляются в конце единицы периода времени на всю сумму, находящуюся на момент начисления на счету.
ptEndOfPeriod
Проценты начисляются только на сумму, которая находилась на счету в начале единицы периода времени. Т.е. на сумму, которая была добавлена вкладчиком к вкладу в течение последней единицы времени, проценты будут начислены по прошествии следующего периода.

Знак минус в результате функции показывает, что данная сумма является кредитовой, т.е. должна быть списана со счета.
Пример
Первоначальный вклад составил 100 руб. дивиденды — 10% годовых. Ежегодно вкладчик добавляет к вкладу 50 руб. Проценты начисляются в конце года только на сумму, которая находилась на счету в начале года, т.е. проценты на сумму, которая была добавлена к вкладу в течение года будут начислены только в конце следующего года. Вычисляем сумму вклада через 5 лет.
{codecitation class="brush: pascal; gutter: false;" width="500px"} var
Sum : Extended;
begin

Sum:=FutureValue(0.1, 5, 50, 100, ptEndOfPeriod);
// Sum:= -466.306

end;{/codecitation}
 


Функция InterestPayment (
Rate: Extended;
NPeriods: Integer ;
PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция вычисляет процентную ставку кредита на определенном этапе в денежном исчислении.
PresentValue — сумма кредита.
Rate — фиксированная процентная ставка кредита.
NPeriods — число этапов, в течение которых производятся выплаты.
Period — номер этапа выплат, для которого производятся вычисления.
FutureValue — значение суммы кредита, по истечении выплат.
Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в конце (ptEndOfPeriod).
Знак минус в результате функции показывает, что данная сумма является кредитовой, т.е. должна быть списана со счета.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
Pay : Extended;
begin

Pay:=InterestPayment( 0.1, 1, 5, 1000, 0, PtStartOfPeriod);
// Pay:= -90.9090909090909

end; {/codecitation}
 


Функция InterestRate (Periods: Integer;
Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция вычисляет процентную ставку инвестиций, необходимую для возврата суммы инвестиций PresentValue с дивидендами.
PresentValue — сумма инвестиций.
FutureValue — полная сумма, полученная от инвестиций. Включает возврат первоначальной суммы инвестиций и дивиденды.
NPeriods — количество этапов выплат.
Payment — сумма периодических выплат.
Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в его конце (ptEndOfPeriod).
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"} var
IRate : Extended;
begin

IRate:=InterestRate(1, -100, -1000, 1500, ptEndOfPeriod);
{ IRate:= 0.4 }

end;{/codecitation}
ВНИМАНИЕ!!! Следует аккуратно использовать финансовые функции и внимательно следить за расстановкой знаков плюс/минус в параметрах функций.
Не рекомендуем использовать функцию InterestRate при написании программ, т.к. данная функция работает некорректно.

Вызов Результат
InterestRate(1, -100, -1000, 1110, ptEndOfPeriod); 0.01
InterestRate(1, -100, -1000, 1150, ptEndOfPeriod); 0.05
InterestRate(1, -100, -1000, 1200, ptEndOfPeriod); 0 (bag)
InterestRate(1, -100, -1000, 1250, ptEndOfPeriod); 0.15
InterestRate(1, -100, -1000, 1300, ptEndOfPeriod); 0.2

 


Функция InternalRateOfReturn (
Guess: Extended;
const CashFlows: array of Double ): Extended;

Модуль: Math
Описание
Функция вычисляет внутреннюю процентную ставку дохода от инвестиций. Массив CashFlows состоит из значений инвестиций и значений получаемого дохода за определенные периоды времени. Первое значение массива должно быть отрицательным, так как оно опредеяет первоначальную сумму инвестиций. Последующие значения могут быть отрицательными (дополнительные инвестиции), положительными (получаемый доход) или равны 0.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
IRate: Extended;
CashFlows: array of Double;
begin

SetLength(CashFlow, 2);
CashFlow[0]:=-1000;
CashFlow[1]:= 1200;
IRate:= InternalRateOfReturn(0, CashFlow);
// IRate:= 0.4

end; {/codecitation}
 

 


Функция NetPresentValue (
Rate: Extended;
const CashFlows: array of Double;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция вычисляет значение текущего платежа, используя массив с расчетными значениями. Данная функция помогает определить расчетную стоимость инвестиций на основе предполагаемого (расчетного) дохода.
Параметр Rate определяет процентную ставку инвестиций.
CashFlows — массив расчетных значений текущих платежей.
Параметр PaymentTime указывает, происходят выплаты в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного этапа.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
PayValue: Extended;
CashFlows: array of Double;
begin

SetLength(CashFlow, 3);
CashFlow[0]:=-100;
CashFlow[1]:= 110;
CashFlow[2]:= 121;
PayValue:= NetPresentValue (0.1, CashFlow, PtStartOfPeriod);
{ PayValue:= 100 }

end; {/codecitation}
 

 


Функция NumberOfPeriods (
Rate, Payment, PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция определяет количество этапов, необходимых для погашения кредита до значения определенного в параметре FutureValue.
PresentValue — первоначальная сумма кредита.
Rate — процентная ставка.
Payment — величина регулярных выплат.
Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в его конце (ptEndOfPeriod).
Пример
Первоначальная сумма кредита составляет 364руб. Процентная ставка 20%. Регулярные ежемесячные выплаты по 100руб производятся в конце месяца. Рассчитаем сколько месяцев необходимо для полной выплаты кредита.
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
Np: Extended;
begin

Np:= NumberOfPeriods ( 0.2, 100, 364, 0, ptEndOfPeriod);
{ Np:= -3 }

end; {/codecitation}
 

 


Функция Payment (
Rate: Extended;
NPeriods: Integer;
PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция вычисляет общую сумму погашения кредита, выплачиваемую на каждом этапе (состоит из текущих выплат и процентов).
PresentValue — сумма заимствования.
NPeriods — срок выплаты кредита. Данный пармаметр указывается количество этапов выплаты (количество лет, кварталов, месяцев и т.д.).
FutureValue — оставшаяся сумма кредита по истечении указанного периода.
Rate — величина процентной ставки кредита (ежегодная, ежеквартальная, ежемесячная и т.д. в соответствии с единицей измерения периода времени).
Параметр PaymentTime определяет, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
PaySum : Extended;
begin

PaySum:= Payment(0.2, 1, 100, 0, ptEndOfPeriod);
{ PaySum:=-120 }

end; {/codecitation}
 

 


Функция PeriodPayment (
Rate: Extended;
Period, NPeriods: Integer;
PresentValue, FutureValue: Extended;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция вычисляет сумму выплат основной части кредита (без учета процентов) на определенном этапе.
PresentValue — сумма заимствований.
NPeriods — срок выплаты кредита (количество этапов).
FutureValue — сумма кредита по прошествии указанного срока.
Period — номер этапа, для которого производятся вычисления.
Rate — процентная ставка кредита.
Параметр PaymentTime определяет, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.
Сумму выплачиваемых процентов кредита можно вычислить с помощью функции InterestPayment.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
PaySum : Extended;
begin

PaySum:= PeriodPayment( 0.1, 2, 5, 1000, 0, ptEndOfPeriod);
{ PaySum:= -180.17722887422 }

end; {/codecitation}
 

 


Функция PresentValue (
Rate: Extended;
NPeriods: Integer;
Payment, FutureValue: Extended;
PaymentTime: TPaymentTime ): Extended;

Модуль: Math
Описание
Функция определяет значение вклада в указанный период времени.
Payment — первоначальная сумма вклада.
NPeriods — срок вклада.
Rate — процентная ставка.
FutureValue — значение, которого могут достигнуть инвестиции в определенный период.
Параметр PaymentTime указывает, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
Value : Extended;
begin

Value:= PresentValue( 0.1, 1, -100, 0, ptEndOfPeriod);
{ Value:= 90,9090909090909 }

end; {/codecitation}
 

 


Функция SLNDepreciation (
Cost, Salvage: Extended;
Life: Integer ): Extended;

Модуль: Math
Описание
Функция вычисляет сумму амортизационных отчислений за единицу периода времени по методу линейной (равномерной) амортизации.
Cost — первоначальную стоимость оборудования.
Salvage — конечная стоимость оборудования.
Life — срок эксплуатации.
Для вычисления амортизации по ускоренному методу используйте функцию SYDDepreciation.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"} var
Amort : Extended;
begin

Amort:= SLNDepreciation(1000, 200, 5); { Amort:= 160 }

end;{/codecitation}
 

 


Функция SYDDepreciation (
Cost, Salvage: Extended;
Life, Period: Integer ): Extended;

Модуль: Math
Описание
Функция вычисляет сумму амортизационных отчислений на заданном этапе по методу ускоренной амортизации.
Cost — первоначальная стоимость оборудования.
Salvage — конечная стоимость.
Life — срок эксплуатации.
Period — номер этапа, для которого определяется сумма амортизационных отчислений.
Для вычислений по методу равномерной амортизации используйте функцию SLNDepreciation.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
Amort : Extended;
begin

Amort:= SYDDepreciation( 1000, 100, 5, 1); { Amort:=300 }

end; {/codecitation}
 

Функции и процедуры для работы с данными перечислимого типа

Процедура Dec( var X[; N: Longint] );
Модуль: System
Описание
Процедура уменьшает значение переменной X на величину N или на 1, если параметр N опущен (т.е. Dec(X)=X-1, а Dec(X,N)= X-N). Аргумент X должен представлять собой переменную перечислимого типа (включая Int64), или типа PChar (если допускается расширенный синтаксис). Значение необязательного параметра N должно иметь целочисленный тип.
Рекомендуется использовать процедуру Dec в программах, насыщенных циклами, т.к. она генерирует наиболее оптимизированный код.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
i: Integer;
begin
i:= Height-10;
while i>0 do
begin
Canvas.TextOut(10, i, IntToStr(i));
Dec(i, 20); // i:= i-20
end;
end; {/codecitation}
 


Процедура Inc( var X[; N: Longint] );
Модуль: System
Описание
Процедура увеличивает значение переменной X на величину N или на 1, если параметр N опущен (т.е. Dec(X)=X+1, а Dec(X,N)= X+N). Аргумент X должен представлять собой переменную перечислимого типа (включая Int64), или типа PChar (если допускается расширенный синтаксис). Значение необязательного параметра N должно иметь целочисленный тип.
Рекомендуется использовать процедуру Dec в программах, насыщенных циклами, т.к. она генерирует наиболее оптимизированный код.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
i: Integer;
begin
i:= 10;
while i<Height do
begin
Canvas.TextOut( 10, i, IntToStr(i) );
Inc( i, 20); // i:= i+20
end;
end; {/codecitation}
 


Функция Odd( X: LongInt ): Boolean;
Модуль: System
Описание
Функция определяет четность аргумента X. Возвращает True, если Х представляет собой нечетное значение и False, если четное.
 


Функция Ord( X ): Longint;
Модуль: System
Описание
Функция возвращает порядковый номер (индекс) выражения перечислимого (кроме Int64) или символьного типа, переданного в параметре X. Если аргумент имеет перечислимый тип, то функция возвращает индекс элемента (1-й элемент имеет индекс 0). Если Х представляет собой значение типа Char, то функция возвращает ASCII код символа.
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}type
MyType = (x1, x2, x3, x4);
var
S: string;
begin
S:= ‘x3 имеет порядковый номер ‘+ IntToStr( Ord( x3 ))+ #13;
S:= S+ ‘ASCII код символа "Б" — ‘ + IntToStr( Ord( ‘Б’ ))+ #13;
S:= S+ ‘ASCII код символа "б" — ‘ + IntToStr( Ord( ‘б’ ));
MessageDlg( S, mtInformation, [mbOk], 0);
end; {/codecitation}
 


Функция Pred( X );
Модуль: System
Описание
Функция возвращает значение, предшествующее значению аргумента Х. Аргумент должен иметь перечислимый тип (допускается Int64).
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"} var
S: string;
begin
S:= ‘Число 25 следует за числом ‘ + IntTostr( Pred(25)) + #13;
S:= S + ‘Буква Д стоит в алфавите после буквы ‘ + Pred( ‘Д’ );
MessageDlg( S, mtInformation, [mbOk], 0);
end;{/codecitation}
 


Функция Succ( X );
Модуль: System
Описание
Функция возвращает значение, следующее за значением аргумента Х. Аргумент должен иметь перечислимый тип (допускается Int64).
Пример
{codecitation class="brush: pascal; gutter: false;" width="500px"}var
S: string;
begin
S:= ‘За числом 25 следует число ‘ + IntTostr( Succ(25))+#13;
S:= S + ‘За буквой Д в алфавите идет буква ‘ + Succ(‘Д’);
MessageDlg( S, mtInformation, [mbOk], 0);
end; {/codecitation}
 

  • 1
  • 2