Касательно первой задачи. Шаг разбиения я, уж извините, но сделал вдвое меньшим - 0.1 это слишком грубо. Кроме того, в методе Симпсона есть одна тонкость: чтобы он успешно работал, нужно, чтобы число промежутков, т.е. величина (b-a)/h, была ЧЕТНОЙ (здесь a и b - пределы интегрирования, h - шаг). А по условию выходит (1.5-1.0)/0.1=5. Поэтому шаг взят 0.05. Метод трапеций - в качестве бонуса.
Код:
Const
a=1.0;
b=1.5;
h=0.05;
Function F(x:Real):Real;
begin
F:=Sin(x)*Ln(Sin(x)/Cos(x));
end;
Function Antiderivative(x:Real):Real;
begin
Antiderivative:=Ln(Sin(x/2)/Cos(x/2))-Cos(x)*Ln(Sin(x)/Cos(x));
end;
Procedure Rectangle;
var
i,N:Integer;
Sum:Real;
begin
N:=Round((b-a)/h);
Sum:=0;
for i:=0 to N-1 do
Sum:=Sum+h*F(a+h*i);
WriteLn('Rectangle: ', Sum:10:5);
end;
Procedure Trapezium;
var
i,N:Integer;
Sum:Real;
begin
N:=Round((b-a)/h);
Sum:=(F(a)+F(b))/2*h;
for i:=1 to N-1 do
Sum:=Sum+h*F(a+h*i);
WriteLn('Trapezium: ', Sum:10:5);
end;
Procedure Simpson;
var
i,N:Integer;
Sum:Real;
begin
N:=Round((b-a)/(2*h));
Sum:=(F(a)+F(b))/3*h;
for i:=1 to N do
Sum:=Sum+4.0*h/3.0*F(a+h*(2*i-1));
for i:=2 to N do
Sum:=Sum+2.0*h/3.0*F(a+h*(2*i-2));
WriteLn('Simpson: ', Sum:10:5);
end;
BEGIN
Rectangle;
Trapezium;
Simpson;
WriteLn('Accurate value:', (Antiderivative(b)-Antiderivative(a)):10:5);
ReadLn;
END.