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;
}

