MIXC\LUMPSUMS.C  ·  C  ·  3.3 KB  ·  1988-01-08  ·  from PCPlus_Issue-30_Mar-1989
#include <stdio.h>

main()         /* Example 6.9 */
{
   double amount, rate, factor;
   int option, months;
   int i;

   /* declaration of functions */
   int present_value(); /* present value of future payment */
   int future_value();  /* future value of present payment */
   int monthly();       /* monthly installments on a present payment */
   int monthly_value(); /* present value of monthly installments */

   /* declaration of array of pointers to functions */
   int (*function[4])() = {present_value, future_value,
                           monthly, monthly_value};

   menu(&option,&months,&rate,&amount);  /* display menu */

   for(;;) {                             /* loop forever */
      for (factor = 1+rate, i = 1; i < months; i++)
         factor = factor * (1 + rate);
      /* call appropriate function */
      (*function[option])(factor, amount, rate, months);
      menu(&option,&months,&rate,&amount);
   }
}

menu(option,months,rate,amount) /* display menu and collect
                                   the input values */
int *option, *months;
double *rate, *amount;
{
   printf(
      "\n1) present value of a single future payment\n");
   printf(
      "2) future value of a single present payment\n");
   printf(
      "3) monthly installments on a present payment\n");
   printf(
      "4) present value of monthly installments\n");
   printf(
      "5) <<exit program>>\n\n");
   printf("     enter option --> ");
   scanf("%d",option);
   if (*option<0 || *option>4) exit(0); /* exit program */
   else (*option)--;                    /* make option 0..3 */
   printf("\nenter # of months --> ");
   scanf("%d",months);
   printf("enter annual interest rate (%%) --> ");
   scanf("%lf",rate);
   *rate = *rate/1200;
   printf("enter amount of loan --> ");
   scanf("%lf%*c",amount);
}

present_value(factor, amount)
double factor, amount;
{
   printf("the present value is %9.2f\n", amount/factor);
}

future_value(factor, amount)
double factor, amount;
{
   printf("the future value is %9.2f\n", amount*factor);
}

monthly(factor, amount, rate, months)
double factor, amount, rate;
int    months;
{
   int answer, i;
   double result;
   double accum_interest = 0;
   double owed, interest, principle;

   if (rate == 0) result = amount/months;
   else result = factor * amount * rate / (factor-1);
   printf("the monthly payment is %9.2f\n", result);
   printf("do you wish to see the table (y or n)? ");
   answer = getchar();
   putchar('\n');
   if( answer == 'y' || answer == 'Y') {
      accum_interest = 0;
      owed = amount;
      printf(" month    principle          interest   ");
      printf("  amount owed    accumulated interest\n");
      for (i = 1; i<=months; i++) {
         interest = rate * owed;
         principle = result - interest;
         owed = owed - principle;
         accum_interest = accum_interest + interest;
         printf("  %2d      %9.2f       %9.2f",
            i,principle,interest);
         printf("       %9.2f       %9.2f\n",
            owed,accum_interest);
      }
   }
}

monthly_value(factor, amount, rate)
double factor, amount, rate;
{
   printf("the present value is %9.2f\n",
      rate == 0 ? amount : amount * (factor-1)/(rate * factor));
}