-
Notifications
You must be signed in to change notification settings - Fork 0
/
TrapezoidalRule.pas
75 lines (69 loc) · 1.47 KB
/
TrapezoidalRule.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Program trapezoidal_rule;
type
vector = array[0..256] of real;
var
//coefficients of polynomial
coefficients: vector;
//degree of polynomial
degree: integer;
//amount of parts
n: integer;
//step of the part
h: real;
//result of calculation
result: real;
//solution boundries
x1, x2: real;
//counter
i: integer;
procedure write_pl;
begin
write(coefficients[degree]:0:2,'*X^',degree);
for i:=degree-1 downto 0 do
write(' + ',coefficients[i]:0:2,'*X^',i);
end;
function pow (number: real; power: integer): real;
var result: real; i:integer;
begin
result := 1;
for i:= 1 to power do
result := result*number;
pow := result;
end;
function f(x: real): real;
var result: real; i:integer;
begin
result := 0;
for i:=0 to degree do begin
result := result + coefficients[i] * pow(x, i);
end;
f := result;
end;
Begin
write('Please enter the degree of polynomial: ');
readln(degree);
write('Please enter the aproximate sollution: ');
write('X^',degree,': ');
readln(coefficients[degree]);
for i:=degree-1 downto 0 do begin
write('X^',i,': ');
readln(coefficients[i]);
end;
writeln;
write('Your polynomial is: ');
write_pl;
write('Please enter the amount of division parts: ');
readln(n);
writeln('Please enter the integral bounds: ');
write('x1: ');
readln(x1);
write('x2: ');
readln(x2);
writeln;
h := (x2 - x1) / n;
result := f(x1)+f(x2);
for i:= 1 to n-1 do
result := result + 2*f(x1+i*h);
result := result*h/2;
write('Result: ',result:0:5);
end.