// PROGRAM integ // compute integral of f(x) from x = a to x = b // using rectangular approximation #include "TrueBASIC.h" #define f(x) (cos((x))) int main(); void initial(double *a, double *b, double *sum, double *dx, double *delta, int *n); void sumf(double a, double b, double *sum, double dx, double delta); void Double(double *dx, double *delta, int *n); void output(double sum, double dx, int n); int main() { int k, n; double a, b, delta, dx, sum; initial(&a, &b, &sum, &dx, &delta, &n); do { sumf(a, b, &sum, dx, delta); output(sum, dx, n); Double(&dx, &delta, &n); } while(!(kbhit())); k = getch(); return 0; } void initial(double *a, double *b, double *sum, double *dx, double *delta, int *n) { char Stmp1_[_LBUFF_]; printf("lower limit a = "); fgets(Stmp1_, _LBUFF_, stdin); sscanf(Stmp1_, "%lg", a); printf("upper limit b = "); fgets(Stmp1_, _LBUFF_, stdin); sscanf(Stmp1_, "%lg", b); (*n) = 2; // initial number of intervals (*dx) = ((*b) - (*a))/(*n); (*delta) = (*dx); // delta = dx only for n = 2 (*sum) = f((*a)); // -> (f(a) + f(b))/2 for trapezoidal rule printf("\n"); printf(" n rectangular approximation\n"); printf("\n"); } void sumf(double a, double b, double *sum, double dx, double delta) { double x; x = a + dx; // dx is integration interval while(x < b) { (*sum) += f(x); x += delta; } } void Double(double *dx, double *delta, int *n) // double number of intervals { (*delta) = (*dx); (*n) *= 2; (*dx) *= 0.5; // dx does not equal delta for n > 2 } void output(double sum, double dx, int n) { printf("%7d ", n); printf(" "); printf("%12.7f\n", sum*dx); }