Помогите исправить ошибку( последнее значение не выводит, почему?)

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
ole444ka1995
Сообщения: 1
Зарегистрирован: 22 дек 2014, 21:01

22 дек 2014, 21:09

Program Simpson;
Uses CRT;

Var

i,n,np:integer;
a,b,x,y,f,s1,s2,sum,sump,h,hp,r,r1,np1, s:real;
yi: array [0..100] of real;
Begin
clrscr;
a:=1.570796327; {верхний предел интегрирования}
b:=0; {нижний}
writeln ('введите n: ');
read (n);
h:=(a-b)/n;
hp:=h*2;
{формула Симпсона}
x:=b;
i:=0;
while (x<=a) do begin yi:=(x-1)*sin(3*x)/((x*x)+2);
{writeln ('y(',x,')=',yi);}
x:=x+h;
i:=i+1;
end;
i:=1;
while (i<=n-1) do begin s1:=s1+yi;
i:=i+2;
end;
i:=2;
while (i<=n-1) do begin s2:=s2+yi;
i:=i+2;
end;
sum:=(h/3)*(yi[0]+yi[n]+4*s1+2*s2);

{погрешность`}
x:=b;
i:=0;
np1:=(a-b)/hp;
np:=round(np1);
s1:=0;
s2:=0;
while (x<=a) do begin yi:=(x-1)*sin(3*x)/((x*x)+2);
x:=x+hp;
i:=i+1;
end;
i:=1;
while (i<=np-1) do begin s1:=s1+yi;
i:=i+2;
end;
i:=2;
while (i<=np-1) do begin s2:=s2+yi;
i:=i+2;
end;
sump:=(hp/3)*(yi[0]+yi[np]+4*s1+2*s2);
r:=abs(sum-sump)/15;
writeln('SP=',sump:4:4);
writeln('Rc=',r:4:4);
readln;



Begin

a:=1.570796327; {верхний}
b:=0; {нижний}
writeln ('введите n: ');
read (n);
h:=(b-a)/n;
hp:=h*2;
{трапеция}
x:=a;
i:=0;
while (x<=b) do begin yi:=(x-1)*sin(3*x)/((x*x)+2);
writeln ('y(',x,')=',yi);
x:=x+h;
i:=i+1;
end;
for i:=1 to (n-1) do s:=s+yi;
sum:=(h/2)*(yi[0]+yi[n]+2*s);
writeln ('Str=',sum); readln;

{погрешность`}
x:=a;
i:=0;
np1:=(b-a)/hp;
np:=round(np1);
s:=0;
while (x<=a) do begin yi[i]:=(x-1)*sin(3*x)/((x*x)+2);
x:=x+hp;
i:=i+1;
end;
for i:=1 to (np-1) do s:=s+yi[i];
sump:=(hp/2)*(yi[0]+yi[np]+2*s);
sum:=(h/2)*(yi[0]+yi[n]+2*s);
R:=abs(sum-sump)/3;
writeln('Rtr=',R); readln;
end;

end.
Ответить