**[**Back to MATH SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**

**program **integration; **uses **crt;
*{ program below demonstrates Pascal code used to compute a definite }
{ integral. Useful for many calculus-related functions such as }
{ finding areas of irregular shapes when a functional relation is }
{ known. You may freely use this code, but do please give me the }
{ credits. }
{ A negative area as an answer, is the result of incorrectly defining
the lower and upper bounds for a function. For example, using the
function
6 - 6x^5, a perfectly justifiable lower bound would be 0, while - 5
would not be. a perfectly justifiable upper bound would be 1, while
6 would not be. The non-justifiable bounds used as examples, are not
defined in the function used, so a negative area would result in this
case
{ Tutorial: this program uses Simpson's rule as a method of finding }
{ the area under a graphed curve. A lower and an upper limit is set }
{ where the area is calculated. The area is cut up into a number of }
{ rectangles dictated by the 'number of divisions'. The more you }
{ divide up this area, the more accurate an approximation becomes. }
***var
**lower, upper, divisions, sum, width, counter, x, left, right, middle,
c: real;
**procedure **formula;
*{ procedure set apart from rest of program for ease of changing the }
{ function if need be. The function is defined as: f(x) = }
{ <expression>, expression being set in a Pascal-type statement }
***begin
**c := 6 - ( 6 * x * x * x * x * x ); *{ current function set: 6 - 6x^5 }
***end**;
**begin
**clrscr;
*{ read in lower bound }
*writeln('Input lower limit.');
readln(lower);
*{ read in upper bound }
*writeln('Input upper limit.');
readln(upper);
*{ read in the number of divisions.. The higher you make this number, }
{ the more accurate the results, but the longer the calculation... }
*Writeln('number of divisions?');
readln(divisions);
*{ set the total sum of the rectangles to zero }
*sum := 0;
*{ determine width of each rectangle }
*width := (upper - lower) / (2 * divisions);
*{ initalize counter for divisions loop }
*counter := 1;
clrscr;
writeln('Working...');
*{ start computations }
***repeat
***{ define left, right, and middle points along each rectangle }
*left := lower + 2 * (counter - 1) * width;
right := lower + 2 * counter * width;
middle := (left + right) / 2;
*{ compute functional values at each point }
*x := left;
formula;
left := c;
x := middle;
formula;
middle := c;
x := right;
formula;
right := c;
*{ calculate particular rectangle area and increment the area to the }
{ sum of the areas. }
*sum := (width * (left + 4 * middle + right)) / 3 + sum;
*{ write sum to screen as a "working" status }
*writeln;
write(sum:0:9);
gotoxy(1,2);
*{ increment counter }
*counter := counter + 1;
*{ stop loop when all areas of rectangles are computed }
***until **counter = divisions;
*{ output results }
*clrscr;
writeln('The area under the curve is ', sum:0:9, '.');
*{ ^^^^^^^^ }
***end**. *{ format code used to eliminate }
{ scientific notation in answer }*

**[**Back to MATH SWAG index**]** **[**Back to Main SWAG index**]** **[**Original**]**