bonl1@CFSMO.HONEYWELL.COM (Boniface Lee #1) (01/03/91)
Does anyone has a source program for mortgage payment calculations? I like to run it on my IBM PC...please e-mail the program...thanks! Boniface Lee (bonl1@cfsmo.honeywell.com) Honeywell Commercial Flight Systems - Minneapolis Operations (612) 785-4629
joeb@marque.mu.edu (01/04/91)
Here's a simple little mortgage calcuator program. It prints tables of monthly
payments for different principals and different interest rates; tables are
printed for 15-year and 30-year mortgages. You can optionally include a
specific principal amount in the table by including it on the command line.
If desired, it should be easy to include a specific interest rate also.
Have fun!
------------------------------------------------------------------------
/*
** Compute monthly mortgage payments for 15 and 30 year mortgages, at
** various interest rates. Expects tab stops every 8 characters.
**
** Usage: mortgage [amount]
*/
#define P_LOW 50000 /* range of principal */
#define P_HIGH 200000
#define P_INCR 25000
#define Y_LOW 15 /* range of mortgage terms */
#define Y_HIGH 30
#define Y_INCR 15
#define R_LOW .085 /* range of interest rates */
#define R_HIGH .125
#define R_INCR .005
double pow(double,double);
main(argc,argv)
int argc;
char *argv[];
{
int principal, years, amount = 0;
float rate;
char did_it;
if (argc > 1) {
if (argv[1][0] == '?') {
usage();
exit(1);
}
amount = atoi(argv[1]);
}
for (years=Y_LOW; years<=Y_HIGH; years+=Y_INCR) {
printf("\n\t\tMonthly Payment, %d-year mortgage\n",years);
printf("Principle\t\tInterest Rate\n");
for (rate=R_LOW; rate<R_HIGH+R_INCR/2.; rate+=R_INCR)
printf("\t %4.1f%%",rate*100.);
printf("\n");
for (rate=R_LOW; rate<R_HIGH+R_INCR/2.; rate+=R_INCR)
printf("\t -----");
printf("\n");
did_it = 0;
for (principal=P_LOW; principal<=P_HIGH+P_INCR; principal+=P_INCR) {
if ( amount && (!did_it) &&
((amount < principal) || (principal > P_HIGH)) ) {
one_line(amount,years);
did_it++;
}
if (principal <= P_HIGH)
one_line(principal,years);
}
}
}
usage()
{
printf("Mortgage payment calculator\n\n");
printf("Usage: mortgage [amount]\n");
}
one_line(amount,years)
int amount;
int years;
{
float rate;
printf("$%6d",amount);
for (rate=R_LOW; rate<R_HIGH+R_INCR/2.; rate+=R_INCR)
printf("\t%7.2f", (float)
(amount * rate/12 / (1 - 1 /
(double)pow((double)(1.+rate),(double)years) )) );
printf("\n");
}
----------------------------------------------kevin@ttidca.TTI.COM (Kevin Carothers) (01/04/91)
In article <9101022144.AA13145@hp370b.CFSMO.Honeywell.COM> bonl1@CFSMO.HONEYWELL.COM (Boniface Lee #1) writes: > >Does anyone has a source program for mortgage payment calculations? I like >to run it on my IBM PC...please e-mail the program...thanks! > > >Boniface Lee (bonl1@cfsmo.honeywell.com) >Honeywell Commercial Flight Systems - Minneapolis Operations -- Sure. *I* work at CITIBANK :-) (But seriously, folks...) just compile and run, and keep hitting cariage returns to get monthly payment, interest, principal and balance info, and stop bugging your loan officer. I developed this on a PDP-11/70 (!!), and run it (with a couple of silly lint errors) on my SPARC. Hope it helps. -- /* Program to print a mortgage payment debt over a period of years */ #include <stdio.h> main() { int c,i; float mort_amt; float mort_int; float mort_pmt; float intrst; int mort_yrs; float t_int; float t_t; float t_tmp; float temp; float tmp_amt; float tmp_int; int tmp_yrs; int y_yrs; float y_int; float y_t; float y_tmp; printf("Enter the loan amount: "); scanf("%f",&mort_amt); printf("Enter the years of the loan: "); scanf("%d",&mort_yrs); tmp_yrs=mort_yrs; printf("Enter the interest rate: "); scanf("%f",&mort_int); if(mort_int < 1.) mort_int *= 100.; intrst = (mort_int/100.)/12.; mort_yrs *= 12; temp = 1.; do { temp *= (1. +intrst); mort_pmt += (1./temp); mort_yrs--; } while(mort_yrs > 0); temp = mort_amt/mort_pmt; mort_int /= 100.; y_tmp = y_int = y_t = 0.; mort_yrs = 0; tmp_amt = mort_amt; printf("\nloan amount: $%6.2f\t\t",tmp_amt); printf("loan rate: %4.2f%\n",mort_int*100.); printf("monthly payment: $%10.2f\n\n",temp); if((c=getchar()) != EOF) if((c=getchar()) == EOF) exit(); do { printf("year: %d",++mort_yrs); printf("\nloan amount: $%6.2f\t\t",tmp_amt); printf("loan rate: %4.2f%\n",mort_int*100.); printf("monthly payment: $%10.2f\n\n",temp); printf("month\tpayment\t\tinterest\tprincipal\tbalance\n"); printf("-----\t-------\t\t--------\t---------\t-------\n"); t_tmp = t_int = t_t = 0.; for(i=1 ; i <= 12 ; ++i) { if(mort_amt <= .01) { mort_yrs = tmp_yrs; /* force exit */; break; } tmp_int = temp - (mort_amt*(mort_int/12.)); mort_amt -= tmp_int; printf("%2d\t$%7.2f\t$%7.2f\t$%7.2f\t$%7.2f\n", i,temp,temp-tmp_int,tmp_int,mort_amt); t_tmp += temp; t_t += tmp_int; t_int +=temp-tmp_int; y_tmp+= temp; y_t += tmp_int; y_int += temp-tmp_int; } printf(" \t_______\t\t________\t_________\n"); printf(" \t$%7.2f\t$%7.2f\t$%7.2f\n",t_tmp,t_int,t_t); printf(" \t_______\t\t________\t_________\n"); printf(" \t$%7.2f\t$%7.2f\t$%7.2f\n", y_tmp,y_int,y_t); printf(" \t=======\t\t========\t=========\n"); if((c=getchar()) == EOF) break; } while(mort_yrs< tmp_yrs); }
davidsen@sixhub.UUCP (Wm E. Davidsen Jr) (01/06/91)
Here's a program I pulled from somewhere once upon a time... I make no
claims in favor of it, and shoud you have have any problem please tell
the authors, not me.
/*
*
* loan.c
* @(#) loan.c amoritization program
*
* acronym: loan amortization program
* ----
*
* purpose: calculates monthly payment, future value
* and creates an amortization schedule
*
* 06/27/84 Bill Gregg, Informatics General Corp.
* 07/12/84 Revision 1
* 07/12/84 Revision 2
* 11/05/85 Jane Medefesser, Implementation NPSN Unix (wilbur)
* compile as follows: 'cc -o <outfile> loan.c -lm'
* 12/05/85 Changes to direct output to a file.
* 03/02/88 Implemented on Eternity 5.3.1
*
*/
#include <stdio.h>
#include <math.h>
/*
*
*/
main() /* loan program */
{
float amt, term, rate, ic;
float r, temp, pmt, fv;
float exp, prin, x, y, mbeg, mnbr, yrint = 0;
int month, i, k, a = 0, yr=1;
char d, filename[9], c;
FILE *fp;
/* prompt for input from terminal */
printf("Enter principal amount: ");
scanf("%f", &amt);
printf("Enter term in years: ");
scanf("%f", &term);
printf("Enter interest rate in percent: ");
scanf("%f", &rate);
printf("Enter month payments begin (ex: 8 = August): ");
scanf("%f", &mbeg);
/* compute payment and future value */
r = rate/100.0;
x = 1.0 + r/12.0;
y = term*12.0;
temp = (1.0 / pow(x,y));
pmt = (amt*r/12.0) / (1-temp);
k = term*12;
fv = pmt*k;
ic = fv - amt;
printf("Do you want the report directed to a file or to the screen?");
printf("\n[f = file / s = screen] : ");
d = getchar(); /* This is only here to eat up the '\n' left over
from the last scanf. */
d = getchar();
switch(d) {
case 'f':
d = getchar();
printf("\nEnter a filename: ");
scanf("%s", filename);
while((c = getchar()) != '\n') {
filename[a] = c; a++; }
fp = fopen(filename, "w");
break;
default:
fp = stdout;
break;
}
/* print header */
fprintf(fp,"\n\t *** Amortization Schedule ***\n\n");
fprintf(fp,"Principal: %.2f\n", amt);
fprintf(fp,"Future value: %.2f\n", fv);
fprintf(fp,"Term of loan in years: %.1f\n", term);
fprintf(fp,"Interest Rate: %3.3f\n", rate);
fprintf(fp,"Total Interest Charge: %.2f\n", ic);
fprintf(fp,"Payment: %.2f\n", pmt);
fprintf(fp,"\nMONTH\tPRINCIPAL\tINTEREST\tBALANCE\n");
/* start of loop to print amortization schedule */
mnbr=mbeg;
for (i=1; i<=k; i++) {
month = i;
exp = amt*(r/12.0);
yrint=yrint+exp;
prin = pmt-exp;
amt = amt-prin;
mnbr++;
fprintf(fp,"%d\t %.2f\t\t %.2f\t\t %.2f\n", month, prin, exp, amt);
if (mnbr > 12 ) {
fprintf(fp,"\t\tInterest paid for year %d is %.2f\n\n",yr,yrint);
yr++;
yrint=0;
mnbr=1;
}
}
fprintf(fp,"\t\tInterest paid for year %d is %.2f\n\n",yr,yrint);
fclose(fp);
}
--
bill davidsen - davidsen@sixhub.uucp (uunet!crdgw1!sixhub!davidsen)
sysop *IX BBS and Public Access UNIX
moderator of comp.binaries.ibm.pc and 80386 mailing list
"Stupidity, like virtue, is its own reward" -me