#include double atof(); double mexp(); main(argc, argv) int argc; char *argv[]; { char tmp[200]; double prin = 0; double interest = 0; double prepaym = 0; int length = 0; int i = 0; double mon_paym = 0; /* Monthly payment */ double m_intr = 0; /* This months interest paid over course of loan */ double m_prin = 0; /* This months prin paid over course of loan */ double r_prin = 0; /* Remaining prin paid over course of loan */ double m_int = 0; /* monthly interest */ double t_prin = 0; /* Total prin paid over course of loan */ double t_intr = 0; /* Total interest paid over course of loan */ if ((argc == 2) && ((argv[1][0] == 'p') || (argv[1][0] == 'P'))) { fprintf(stdout,"Enter principal amount <$>....................... "); fgets(tmp,100,stdin); prin = atof(tmp); fprintf(stdout,"Enter interest rate <%%>.......................... "); fgets(tmp,100,stdin); interest = atof(tmp); fprintf(stdout,"Enter length of loan .................... "); fgets(tmp,100,stdin); length = atoi(tmp); fprintf(stdout,"Enter monthly principal prepayment .... "); fgets(tmp,100,stdin); prepaym = atof(tmp); fprintf(stdout,"\n"); if ((prepaym <= 0) || (tmp[0] == '\n')) { prepaym = 0; } } else if ((argc == 2) && ((argv[1][0] == 'v') || (argv[1][0] == 'V'))) { fprintf(stdout,"amort: Version 1.00 \n"); fprintf(stdout," Copyright 1987 by Michael Brochstein\n"); fprintf(stdout," All rights reserved.\n"); } else if ((argc != 4) && (argc != 5)) { fprintf(stderr,"Usage: amort p \n"); fprintf(stderr," amort v \n"); fprintf(stderr," amort "); fprintf(stderr,"\n"); fprintf(stderr," amort "); fprintf(stderr," \n"); } else if ((argc == 4) || (argc == 5)) { prin = atof(argv[1]); interest = atof(argv[2]); length = atoi(argv[3]); if (argc == 5) { prepaym = atof(argv[4]); } } if ((argc == 4) || (argc == 5) || ((argc == 2) && ((argv[1][0] == 'p') || (argv[1][0] == 'P')))) { m_int = (interest/100)/12; mon_paym = prin / ( (1 - mexp(1 + m_int, length)) / m_int); if (prepaym == 0) { fprintf(stdout,"-Monthly payment.......$ %12.2f\n", mon_paym); fprintf(stdout,"-Total interest paid...$ %12.2f\n", mon_paym*length-prin); } else if (prepaym > 0) { fprintf(stdout,"-Regular monthly payment........$ %12.2f\n", mon_paym); fprintf(stdout,"-Monthly principal pre-payment..$ %12.2f\n", prepaym); } r_prin = prin; if (prepaym == 0) { for (i = 1; i <= length; i++) { m_intr = r_prin * m_int; m_prin = mon_paym - m_intr; r_prin -= m_prin; t_intr += m_intr; t_prin += m_prin; } } else if (prepaym > 0) { i = 1; while (r_prin > 0) { m_intr = r_prin * m_int; m_prin = mon_paym - m_intr; if (m_prin > r_prin) { m_prin = r_prin; } r_prin -= (m_prin + prepaym); t_prin += (m_prin + prepaym); if (r_prin == -prepaym) { r_prin = 0; t_prin -= prepaym; prepaym = 0; } t_intr += m_intr; ++i; } fprintf(stdout,"-Total interest paid............$ %12.2f\n", t_intr); fprintf(stdout,"-Length of loan ......... %12d\n",i-1); } } } double mexp(x,y) double x; int y; { double ret_val = 1/x; int i = 0; for (i = 0; i < (y-1); i++) { ret_val *= 1/x; } return (ret_val); }