Рассчитать выплаты по кредиту

Задача

Рассчитать месячные выплаты (m) и суммарную выплату (s) по кредиту.

О кредите известно, что он составляет n рублей, берется на y лет, под p процентов.

Пояснение к задаче и алгоритм решения

Месячные выплаты находятся по формуле:
m = (n * p * (1 + p)y) / (12 * ((1 + p)y – 1)), где p выражается в долях единицы, а не процентах.

Суммарная выплата представляет собой выплаты за все месяцы каждого года:
s = (m * 12) * y

Исходный код на языке программирования Pascal

var
    m, s, p, n, r, a: real;
 
begin
    write('Величина заема : ');
    readln(s);
    write('Процент: ');
    readln(p);
    write('Количество лет: ');
    readln(n);
 
    r := p / 100;
    a := exp(ln(1 + r) * n);
    m := (s * r * a) / (12 * (a - 1));
    m := trunc(100 * m + 0.5) / 100;
 
    writeln;
 
    writeln('Месячная выплата: ', m:5:2);
    writeln('Прибыль банка: ', m * 12 * n - s:5:2);
 
readln
end.

Пример(ы) выполнения программы на языке Pascal

Величина заема: 1000000        
Процент: 15
Количество лет: 20
 
Месячная выплата: 13313.46
Прибыль банка: 2195230.40

Особенности решения на языке программирования Pascal

Выражение exp(ln(1 + r) * n) вычисляет (1 + r)n.
Выражение trunc(100 * m + 0.5) / 100 выполняет округление до копейки.

Исходный код на языке программирования C

#include <stdio.h>
#include <math.h>
 
main() {
        int n,y;
        float p,m,s;
        printf("Сумма кредита (руб.): ");
        scanf("%d", &n);
        printf("Период (количество лет): ");
        scanf("%d", &y);
        printf("Процент: ");
        scanf("%f", &p);
 
        p = p / 100;
        m = (n * p * pow((1+p),y)) / (12 * (pow(1+p,y) - 1));
        s = m * 12 * y;
        printf("Ежемесячные выплаты: %.0f руб.\nВсего будет выплачено: %.0f руб.\n", m, s);
}

Пример(ы) выполнения программы на языке C

Сумма кредита (руб.): 1000000
Период (количество лет): 20
Процент: 15
Ежемесячные выплаты: 13313 руб.
Всего будет выплачено: 3195230 руб.

Особенности решения на языке программирования C

Команда для компиляции:

gcc loan.c -lm

Исходный код на языке программирования Python

amount = input("Сколько хотите взять денег: ")
amount = int(amount)
pct = input("Под какой процент вам их дают: ")
pct = int(pct)
years = input("Насколько лет берете: ")
years = float(years)
 
pct = pct / 100
month_pay = (amount * pct * (1 + pct)**years) / (12 * ((1 + pct)**years - 1))
print("Ваш месячный платеж составит: %.2f" % month_pay)
summa = month_pay * years * 12
print("За весь период вы заплатите: %.2f" % summa)

Пример(ы) выполнения программы на языке Python

Сколько хотите взять денег: 1000000
Под какой процент вам их дают: 15
Насколько лет берете: 10
Ваш месячный платеж составит: 16604.34
За весь период вы заплатите: 1992520.63

Исходный код на языке программирования Basic

input "Сумма кредита: ", n
input "Количество лет: ", y
input "Процент: ", p
p = p/100
m = (n * p * (1+p)^y) / (12 * ((1+p)^y - 1))
print "Ежемесячные выплаты: " + m
s = (m * 12 )* y
print "Суммарная выплата: " + s

Пример(ы) выполнения программы на языке Basic

Сумма кредита: 1000000
Количество лет: 20
Процент: 15
Ежемесячные выплаты: 13313.455867
Суммарная выплата: 3195229.408115

Тема

Линейные алгоритмы

Уровень сложности

Сложный

Дата публикации

Комментарий

Почему при вводе (скажем) параметров 100 рублей, 20 лет и 0 процентов на выходе мы получим , что ежемесячно (а также и всего) мы заплатим -1 рубль?

Ответ на от Гость

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