Главная arrow С++ (часть 2) arrow Вычисление платежей по ссуде

Вычисление платежей по ссуде

Вычисление регулярных платежей по ссуде (например, при покупке в рассрочку машины или дома) — возможно, самый популярный вид финансовых расчетов. Платежи вычисляют с помощью следующей формулы:
Payment = (intRate * (principal / payPerYear))/
/(1 - ((intRate / payPerYear) + l)-payPerYear * numYears )5
где intRate обозначает процентную ставку, principal — ссуду, payPerYear — число платежей в течение года, a numYears — количество лет, отпущенных на погашение ссуды.
В программе, приведенной в листинге 6.1, функция regpayo использует эту формулу для вычисления регулярных платежей. В качестве параметров она принимает величину ссуды, процентную ставку, продолжительность ссуды в годах и количество платежей в течение года, а возвращает — сумму платежа.
 
// Вычисляет регулярные платежи по ссуде, double regpay(double principal, double intRate, int numYears,  int payPerYear)  {
double numer; r
double denom;
double b, e;
intRate /= 100.0; // преобразует проценты в дробь
numer = intRate * principal / payPerYear;
e = -(payPerYear * numYears);
b = (intRate / payPerYear) + 1.0;
denom = 1.0 - pow(b, e);
return numer / denom;
}
int main () { double p, r; int y, ppy;
// Устанавливает locale равным english. // Задайте нужный вам язык и/или регион. cout.imbue(locale("english"));
cout « "Enter principal: "; cin » p;
cout « "Enter interest rate (as a percentage): "; cin » r;
cout « "Enter number years: "; cin » y;
cout « "Enter number of payments per year: "; cin » ppy;
cout « "\nPayment: " « fixed « setprecision(2) « regpay(p, r, y, ppy) « endl;
return 0;
Для того чтобы рассчитать регулярные платежи по ссуде, просто введите необходимую информацию в ответ на запросы программы. Далее приведен вывод программы.
Enter principal: 1000
Enter interest rate (as a percentage): 9
Enter number years: 5
Enter number of payments per year:. 12
Payment: 20.76
Функция main () содержит несколько элементов, заслуживающих внимания. Во-первых, в региональной настройке (locale) потока вывода cout выбран английский язык. Это сделано с помощью вызова функции-члена imbueo, которая передает как параметр объект locale со значением engiish. В результате денежные суммы выводятся в формате, принятом в англоязычных странах: запятая отделяет тысячи, а точка — дробную часть. Во-вторых, перед выводом на экран числовой формат рассчитанного платежа изменяется на формат с фиксированной точкой (fixed) и точностью представления (precision), равной двум. В результате на экран выводятся два знака в дробной части (после точки) с соответствующим округлением. При необходимости дробная часть заполняется нулями. Подобный подход применяется во всех финансовых программах. При использовании других региональных установок или языка просто измените язык/регион объекта locale, передаваемого функции imbue().