Listing 1 Mapping and processing functions

int sum(a,b, term)
int a,b, (*term) ();
{
       int i, sum = 0;
      for (i=a; i<b; i++)
              sum = sum + (*term) (i);
      return sum;
}

double dsum(a,b, term)
int a,b;
double (*term) ();
{
       int i;
       double sum = 0;
       for (i=a; i<b; i++)
              sum = sum + (*term) (i);
       return sum;
}

double pi(x)
int x;
{       return 1.0/(16*x*x + 16*x + 3); }

int id(x)
int x;
{       return x; }

int sq(x)
int x;
{       return x*x; }

int main(argc, argv)
int argc;
char **argv;
{
       int n,x;
       char * pid, *psq, *ppi;

       if (argc < 2) return -1;
       n = atoi(argv[1]);
       x = atoi(argv[2]);

       pid = (char *) id;
       psq = (char *) sq;
       printf("%d is the sum of %d to %d\n", sum(n,x,pid), n, x);
       printf("%d is the sum of squares from %d to %d\n\n", sum(n,x,psq),n,x);
       ppi = (char *) pi;
       printf("%10.8f is an approximation of PI\n\n", 8*dsum(n,x,ppi));

       return 0;
}

/* End of File */