2013-07-11 3 views
0

У меня возникли проблемы с пониманием того, почему моя функция не будет работать. Я несколько раз смотрел на цикл while, но я не понимаю, почему программа не выполняется правильно. Как остановить цикл while бесконечно?C++: Функции здания

Я пытаюсь создать программу, которая сообщает пользователю, сколько времени потребуется для погашения кредита и что нужно вернуть в последний месяц. Пользователь вводит в заимствованный кредит, проценты и деньги, которые он/она намеревается заплатить каждый месяц.

Например, я заимствовал 100 долларов США при годовом проценте 12%. В первый месяц я должен заплатить $ 100 * 0.01 = $ 1. Скажем, я плачу 50 долларов в месяц, тогда мой новый баланс составляет 100 + 1 - 50 = $ 51. Теперь я должен заплатить 1% от этого, что составляет $ 0,51. Мой новый баланс составляет 51 + 0,51 - 50 = $ 1,51, и я продолжаю идти, пока все не окупится.

Это то, что мой код выглядит следующим образом:

#include <iostream> 
using namespace std; 
void get_input(double &principal, double &interest, double &payment); 

int main() 
{ 
    double money, i, pay; 


    cout << "How much do you want to borrow ?"; 
    cin >> money; 
    cout << "What is the annual interest rate expressed as a percent?"; 
    cin >> i; 
    cout << "What is the monthly payment amount?"; 
    cin >> pay; 

    i = i/100; 

    get_input(money, i, pay); 

} 

void get_input(double &principal, double &interest, double &payment) 
{ 
    double totalpayment, add = 0; 
    int months = 1; 

while(principal>0) 
{ 
    add = principal*interest; 
    principal = principal + add - payment; 
    months++; 
} 

    totalpayment = payment+principal; 
    cout << "The last month for your debt to be paid off is: " << months << endl; 
    cout << "Your final payment is: " << totalpayment << endl; 

} 
+0

Каковы точные входы, введенные в эту программу? – user2357112

+0

Я ввел 1000 за кредит, 18 за проценты и 50 оплатил ежемесячно – LorrJ

+0

Точный как в том, что вы буквально набрали. Я сомневаюсь, что вы указали долларовые или процентные знаки. – user2357112

ответ

0

Вы должны разделить проценты на 100, прежде чем использовать их:

while(principal>0) 
{ 
    add = principal*interest;//this multiplies the number by 18 instead of .18 
    principal = principal + add - payment; 
    months++; 
} 

Вам нужно умножить на процент - а затем разрыв по 100.

add=principal*interest/100.0; 

Кроме того, если вы платите 18% ежемесячные проценты по кредиту в долларах $ 1000, то лучше платить больше, чем $ 180 в месяц, если вы хотите, чтобы оплатить его. Попробуйте ввести какой-либо ввод, который имеет смысл (например, ваш пример) или добавит код, чтобы проверить, упал ли ваш оставшийся долг.

+0

Ну, я исправил это, но я до сих пор не получаю выход. В моем цикле while должно быть что-то не так. – LorrJ

+0

В соответствующей заметке годовые и ежемесячные ставки смешиваются без конвертации. – user2357112

+0

О, хорошо спасибо пользователю. Я вернусь. – LorrJ

0

Вы уже использовали отладчик? Если бы это был я, я бы установил точку останова в цикле while и вычислил переменные, чтобы увидеть, что он делает. Я считаю, что отладочный код намного легче сделать, чем читать его и быть моим собственным отладчиком. :)

Смежные вопросы