My program runs infinitely for Mortgage Calculator

Mar 29, 2013 at 6:52am
I'm using VS to create a Mortgage Calculator. I want the code to stop executing once the loan balance reaches 0 that's why i set the loanBalance > 0 so once the code reaches 0 it stops ( i think). But the code continues infinitely without ever changing the result of my cout.... I tried doing "--" for the balance of everything yet my code still continues to run without ever stop once it reaches 0. I don't really care about the format at this moment, i just want to know why it keeps running without stoping at 0 and how i could fix it. I would also like to know why are my cout variables not changing at all

**If it helps, the data i'm supposed to enter is 100000 for Loan Amount. 6 for Interest rate and 15 for the years.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <iomanip>


using namespace std;
int main ( )

{

	int month = 1;
	// Holds the user's amount of loan.

	double loanAmount;

	// Holds the user's interest rate.
	
	double i;

	// Holds the user's yearly Interest Rate.

	double interestRate;

	// Holds the user's interest paid every month.

	double interestPaid;
	
	// "n" means the months it will take the user to pay off the loan.

	double n;

	// Holds the variable for total months.

	double years;

	// Holds payment data.

	double monthlyPayment;

	// Holds the user Principle paid.

	double principlePaid;

	// Holds the user Loan balance.

	double loanBalance;

	// Asks the user to input how much money they took out.

	cout<<"Enter loan amount ->";
	cin>>loanAmount;

	// Asks the user to input their interest rate.

	cout<<"Enter interest rate -->";
	cin>>interestRate;
	i = (interestRate/1200);

	// Asks the user to input the number of years they are taking the loan for.

	cout<<"Enter number of years of the laon ->";
	cin>>years;
	n = years*12;
	
	// Equation that determines the user's monthly payment.

	monthlyPayment = loanAmount*(i/(1-pow(1+i,-n)));

	// Equation for interest paid every month.

	interestPaid = loanAmount*i;

	// Equation for Principle paid.

	principlePaid = monthlyPayment-interestPaid;

	// Equation for Loan Balance

	loanBalance = loanAmount-principlePaid;







	cout<<"Month"<<"\t"<<"Payment"<<"\t"<<"Interest Paid"<<"\t"<<"Principle Paid"<<"\t"<<"Loan Balance"<<endl;
	// Beginning of while coding.
	
	while (loanBalance > abs(0))

	{
	

	cout<<month++<<"\t"<<fixed<<setprecision(2)<<monthlyPayment            // Code used to display monthly Payment.
		<<"\t"<<fixed<<setprecision(2)<<interestPaid                       // Code used to display Interest Paid.
	    <<"\t"<<fixed<<setprecision(2)<<principlePaid                      // Code used to display Principle Paid.
		<<"\t"<<fixed<<setprecision(2)<<loanBalance;                       // Code used to display Loan Balance.


	
	}
	cin.get ( ); cin.get ( );
	return 0;
}
Mar 29, 2013 at 7:10am
I think that the following loop

1
2
3
4
5
6
7
8
9
10
11
12
13
	while (loanBalance > abs(0))

	{
	

	cout<<month++<<"\t"<<fixed<<setprecision(2)<<monthlyPayment            // Code used to display monthly Payment.
		<<"\t"<<fixed<<setprecision(2)<<interestPaid                       // Code used to display Interest Paid.
	    <<"\t"<<fixed<<setprecision(2)<<principlePaid                      // Code used to display Principle Paid.
		<<"\t"<<fixed<<setprecision(2)<<loanBalance;                       // Code used to display Loan Balance.


	
	}


will be infinit if the initial value of loanBalance before entering the loop is positive. Also I do not see any sense of using function abs with argument equal to 0.
Last edited on Mar 29, 2013 at 7:11am
Mar 29, 2013 at 8:06am
I see. The abs ( 0 ) came from one of my tries to fix it, it was not on my original code. However, how can i fix the code? I need the loanBalance to keep decreasing at every month. I assumed putting "--" would work and it did, but it went to -inf this time. I'm not sure how to stop the code at 0 and that's what my professor wants
Mar 29, 2013 at 9:49am
Your problem is that your loanBalance is never changing within the loop. Try adding loanBalance-=principalPaid at the end of the loop so that it can eventually reach 0.
Mar 29, 2013 at 10:05am
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
32
33
34
35
36
37
38
39
40
41
42
	// Equation that determines the user's monthly payment.

	monthlyPayment = loanAmount*(i/(1-pow(1+i,-n)));

	// Equation for interest paid every month.

	interestPaid = loanAmount*i;

	// Equation for Principle paid.

	principlePaid = monthlyPayment-interestPaid;

	// Initialize loanBalance.

	loanBalance = loanAmount;





	cout<<"Month"<<"\t"<<"Payment"<<"\t"<<"Interest Paid"<<"\t"<<"Principle Paid"<<"\t"<<"Loan Balance"<<endl;
	// Beginning of while coding.
	
	do 

	{
	





	cout<<month++<<"\t"<<fixed<<setprecision(2)<<monthlyPayment            // Code used to display monthly Payment.
		<<"\t"<<fixed<<setprecision(2)<<interestPaid                       // Code used to display Interest Paid.
	    <<"\t\t"<<fixed<<setprecision(2)<<principlePaid                    // Code used to display Principle Paid.
		<<"\t\t"<<fixed<<setprecision(2)<<loanBalance<<endl;               // Code used to display Loan Balance.


		// Equation for Loan Balance
	loanBalance = loanBalance-principlePaid;
	}
	while (loanBalance>0);



With that code that I just showed you, now the problem is the very last payment. The last payment doesn't get shown...at least with the tests I ran. You can include an IF statement that says

1
2
3
4
5
6
if (loanBalance<monthlyPayment)
{
      monthlyPayment=loanBalance;
      // Formula for the new principle and the new interest paid for the final payment should go here.
    loanBalance=0;
}
Last edited on Mar 29, 2013 at 10:06am
Mar 29, 2013 at 6:08pm
You did help out alot with the code you provided. At least my code stops now :) But I'm still having some issues.

If we leave loanBalance = loanAmount;

the output it will give me for the first loanBlanace would be my total which is 100k. Now if i leave as

loanBalance = loanAmount-principlePaid

The first output will be fine. However, this is my own mistake. I forgot to add that Interest Paid will be reduced as well. So the Interest Paid for month 1 is = 500.00. Month 2 is 498.28. Month 3 = 496.55. The Interest rate you pay a month is decreasing never by the same amount. If i can fix that then i can get my last part done. Any ideas? Also my month's keep increasing in increments of 2. Please help it's due at midnight

****** I figured why this was happening however if anyone can still help me on why my month's are increasing in 2's increments.
Last edited on Mar 29, 2013 at 7:22pm
Mar 30, 2013 at 1:40am
Can you post your updated code?
Mar 30, 2013 at 3:18am
This is my updated code

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <iomanip>


using namespace std;
int main ( )

{

	int month = 1;
	// Holds the user's amount of loan.

	double loanAmount;

	// Holds the user's interest rate.
	
	double i;

	// Holds the user's yearly Interest Rate.

	double interestRate;

	// Holds the user's interest paid every month.

	double interestPaid;
	
	// "n" means the months it will take the user to pay off the loan.

	double n;

	// Holds the variable for total months.

	double years;

	// Holds payment data.

	double monthlyPayment;

	// Holds the user Principle paid.

	double principlePaid;

	// Holds the user Loan balance.

	double loanBalance;

	// Asks the user to input how much money they took out.

	cout<<"Enter loan amount ->";
	cin>>loanAmount;

	// Asks the user to input their interest rate.

	cout<<"Enter interest rate -->";
	cin>>interestRate;
	i = (interestRate/1200);

	// Asks the user to input the number of years they are taking the loan for.

	cout<<"Enter number of years of the laon ->";
	cin>>years;
	n = years*12;
	
	// Equation that determines the user's monthly payment.

	monthlyPayment = loanAmount*(i/(1-pow(1+i,-n)));

	// Equation for interest paid every month.

	interestPaid = loanAmount*i;

	// Equation for Principle paid.

	principlePaid = monthlyPayment-interestPaid;

	// Equation for Loan Balance

	loanBalance = loanAmount-principlePaid;







	cout<<"Month"<<"\t"<<"Payment"<<"\t"<<"Interest Paid"<<"\t"<<"Principle Paid"<<"\t"<<"Loan Balance"<<endl;
	// Beginning of while coding.
	
	do
	{
	

	cout<<month++<<"\t"<<fixed<<setprecision(2)<<monthlyPayment            // Code used to display monthly Payment.
		<<"\t"<<fixed<<setprecision(2)<<interestPaid                       // Code used to display Interest Paid.
	    <<"\t"<<fixed<<setprecision(2)<<principlePaid                      // Code used to display Principle Paid.
		<<"\t"<<fixed<<setprecision(2)<<loanBalance<<endl;                       // Code used to display Loan Balance.


	loanBalance = loanBalance-principlePaid;

	interestPaid = loanBalance*i;

	principlePaid = monthlyPayment-interestPaid;
	}

	while (loanBalance>0);

	cin.get ( ); cin.get ( );
	return 0;
}


My last error is that my result in Interest paid doesn't come off exactly as what my professor wants. For the second month, i get 496.56 when it's supposed to be 498.28.
Topic archived. No new replies allowed.