в унике дали инд задание написать консольный кредитно-банковский калькулятор на плюсах обязательное условие было что бы было минимум 3 входных значения и 2 вызываемых функции(не считая main) вот написал, хочу узнать мнение умников, какие вообще ошибки допустил, что можно улучшить и тд(так как на плюсах до этого вообще почти не прогал) сравнивал с различными подобными онлайн калькуляторами, вроде одинаковые цифры выдает #include <iostream> #include <cmath> using namespace std; float anuent_credit(float credit_sum, float credit_percent, int credit_date) { credit_percent = credit_percent / 100 / 12; // процент ставка в месяц int n = credit_date; // ко-лво платежей float payment = (credit_percent * credit_sum) / (1 - pow(1 + credit_percent, -n)); return payment * n; // сумма платежей за весь срок кредита } float diff_credit(float credit_sum, float credit_percent, int credit_date) { credit_percent = credit_percent / 100 / 12; // процент ставка в месяц float totalPayments = 0.0; for (int i = 0; i < credit_date; ++i) { float payment = (credit_sum / credit_date) + (credit_sum - (credit_sum * i / credit_date)) * credit_percent; totalPayments += payment; } return totalPayments - credit_sum; // переплата } int main() { float credit_sum; int credit_date; char credit_type; float credit_percent; cout << "введите сумму кредита: "; cin >> credit_sum; cout << "введите срок кредита в месяцах: "; cin >> credit_date; cout << "введите процентную ставку: "; cin >> credit_percent; cout << "выберите тип кредита (A - аннуитетный, D - дифференцированный): "; cin >> credit_type; if (credit_type == 'A') { float overPayment = anuent_credit(credit_sum, credit_percent, credit_date); float totalPayment = overPayment - credit_sum; cout << "переплата по кредиту: " << totalPayment << endl; cout << "общая сумма выплат: " << overPayment << endl; } else if (credit_type == 'D') { float overPayment = diff_credit(credit_sum, credit_percent, credit_date); cout << "переплата по кредиту: " << overPayment << endl; cout << "общая сумма выплат: " << overPayment + credit_sum << endl; } else { cout << "неверно выбран тип кредита." << endl; } return 0; } Код #include <iostream> #include <cmath> using namespace std; float anuent_credit(float credit_sum, float credit_percent, int credit_date) { credit_percent = credit_percent / 100 / 12; // процент ставка в месяц int n = credit_date; // ко-лво платежей float payment = (credit_percent * credit_sum) / (1 - pow(1 + credit_percent, -n)); return payment * n; // сумма платежей за весь срок кредита } float diff_credit(float credit_sum, float credit_percent, int credit_date) { credit_percent = credit_percent / 100 / 12; // процент ставка в месяц float totalPayments = 0.0; for (int i = 0; i < credit_date; ++i) { float payment = (credit_sum / credit_date) + (credit_sum - (credit_sum * i / credit_date)) * credit_percent; totalPayments += payment; } return totalPayments - credit_sum; // переплата } int main() { float credit_sum; int credit_date; char credit_type; float credit_percent; cout << "введите сумму кредита: "; cin >> credit_sum; cout << "введите срок кредита в месяцах: "; cin >> credit_date; cout << "введите процентную ставку: "; cin >> credit_percent; cout << "выберите тип кредита (A - аннуитетный, D - дифференцированный): "; cin >> credit_type; if (credit_type == 'A') { float overPayment = anuent_credit(credit_sum, credit_percent, credit_date); float totalPayment = overPayment - credit_sum; cout << "переплата по кредиту: " << totalPayment << endl; cout << "общая сумма выплат: " << overPayment << endl; } else if (credit_type == 'D') { float overPayment = diff_credit(credit_sum, credit_percent, credit_date); cout << "переплата по кредиту: " << overPayment << endl; cout << "общая сумма выплат: " << overPayment + credit_sum << endl; } else { cout << "неверно выбран тип кредита." << endl; } return 0; }
В дополнение к выше комментарию: Сделать сетпресижн для точности после запятой. И использовать дабл. Использовать exception для проверки на число, деление на ноль и прочее. И хорошая практика использовать глобальные переменные. Если прошли циклы, добавить пункт в меню: где есть опция выхода и можно было использовать пока не введет определеную букву или цифру.