CONSTRUCTOR TMortgage.Init(StartPrincipal : Real;
Startlnterest : Real;
StartPeriods Integer ;
StartPeriodsPerYear : Integer);
var I Integer ;
InterestPerPeriod : Real ;
begin
{ Устанавливает все значения начального состояния в } { объекте TMortgage: } Principal := StartPrincipal;

Interest := StartInterest

Periods := StartPeriods;
PeriodsPerYear := StartPeriodsPerYear;

Payments := TList.Create; { Все объекты должны быть созданы }

{ посредством Create }

{ Мы делаем конфигурацию Payments TList для расширения его } { до нужного нам размера : } Payments.Capacity := Periods

{ Создание и добавление к Tlist пустых объектов платежей } { по периодам: } FOR I := 1 ТО Periods DO begin
Payments.Add(TPayment.Create);
end;
Recalc;
{ Построение таблицы закладной } END;
PROCEDURE TMortgage.SetNewInterestRate(NewRate : Real);
begin
Interest := NewRate;
Recalc;
{ Реамортизация закладной и перестройка таблицы } END;
{Этот метод рассчитывает амортизационную таблицу для закладной) {Таблица сохраняется как множество Items внутри TList Payment } PROCEDURE TMortgage.Recalc;
var I : Integer ;
RemainingPrincipal : Real;
PayNum : Integer;
InterestThisPeriod : Real ;
InterestPerPeriod : Real ;
HypotheticalPrincipal : Real; TempPayment, LastPayment : TPayment;

begin InterestPerPeriod := Interest/PeriodsPerYear; MonthlyPI := CalcPayment(Principal,

InterestPerPeriod,

Periods);

{ Округление месячного платежа до центов : }

MonthlyPI := int(MonthlyPI * 100.0 +0.5) / 100.0;

{ Теперь генерируется амортизационная таблица : } RemainingPrincipal := Principal; FOR PayNum := 0 TO (Payments.Count-1) DO begin { Мы должны сделать здесь присвоение, т.к. Payments } { не "знают", какого типа объекты они содержат. } { Присвоение дает "форму" объектам, сохраненным в } { Payment Items[PaymentNumJ Это будет повторяться по } { всему этому модулю. Вы не можете использовать } { элементы сохраненные в TList непосредственно, } { а должны присвоить их одному из элементов того же } { типа, который вы первоначально сохранили в TList. } TempPayment := Payments.Items[PayNum]; { Вычисляет процент на капитал этого периода и } { округляет его до центов : }

InterestThisPeriod := Int((RemainingPrincipal *

InterestPerPeriod) * 100 + 0.5) / 100.0; { Сохраняем значения в объекте платежей: } WITH TempPayment DO begin PaymentNum := PayNum+1; (Номер платежа, начиная cl} IF RemainingPrincipal = 0 THEN

{ Задолженность, подлежащая погашению! } begin PayInterest := 0; PayPrincipal := 0; Balance := 0; end

ELSE (Сумма основного капитала, подлежащая оплате} begin HypotheticalPrincipal :=

MonthlyPI - InterestThisPeriod + ExtraPrincipal; IF HypotheticalPrincipal > RemainingPrincipal THEN PayPrincipal := RemainingPrincipal ELSE

PayPrincipal := HypotheticalPrincipal; Paylnterest := InterestThisPeriod; RemainingPrincipal :=

RemainingPrincipal - PayPrincipal;
{ Откорректировать текущий баланс } Balance := RemainingPrincipal;
end;

{ Откорректировать поля накопленного процента и } { суммы основного капитала: }


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в среде Delphi



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31