Вычисление интеграла методом Ньютона-Котеса (теория и программа на Паскале)
p:=',При '+'X'+p+' = '+p1
else
p:=',When '+'X'+p+' = '+p1;
outtextxy(285,140+i*15,p);
end;
readln;
end;
3:
graphik(ea,a,b,f);
5:
begin
closegraph;
halt;
end;
end;
until (abs(x) mod 6)=4;
k:=abs(x) mod 6;
end;
end.
================================================
========МОДУЛЬ GRAPHIC========
================================================
unit graphic;
interface
uses
k_unit,crt,graph;
procedure hwg(ea:word);
procedure graphik(ea:word;a,b:real;f1:string);
implementation
procedure hwg(ea:word);
{Процедура окна помощи при графике}
var
f:string;
begin
settextstyle(0,0,0);
setfillstyle(1,3);
bar(150,100,390,380);
setcolor(0);
rectangle(153,103,387,377);
rectangle(155,105,385,375);
setcolor(14);
if ea mod 2 =0 then
begin
outtextxy(160,115,' ОКНО ПОМОЩИ');
outtextxy(160,140,' Для работы с графиком');
outtextxy(160,155,' используйте клавиши:');
outtextxy(160,180,' PAGE UP-первоначальный');
outtextxy(160,195,' вид графика;');
outtextxy(160,210,' HOME-начальный масштаб;');
outtextxy(160,225,' INSERT-включить/выключеть');
outtextxy(160,240,' заливку области;');
outtextxy(160,255,' DELETE-включить/выключеть');
outtextxy(160,270,' сетку;');
outtextxy(160,285,' END-показать/убрать цифры');
outtextxy(160,300,' F1- Помощь;');
outtextxy(160,315,' Стрелки ВВЕРХ/ВНИЗ- ');
outtextxy(160,330,' увеличение/уменьшение');
outtextxy(160,345,' масштаб .');
outtextxy(160,360,'Для возрата нажмите ENTER.');
end
else
begin
outtextxy(160,115,' HELP WINDOW');
outtextxy(160,140,' For the work with graphic');
outtextxy(160,155,' use this keys:');
outtextxy(160,180,' PAGE UP-Primery form of');
outtextxy(160,195,' graphik;');
outtextxy(160,210,' HOME-Primery scale;');
outtextxy(160,225,' INSERT-Turn on/off inking');
outtextxy(160,240,' the field;');
outtextxy(160,255,' DELETE-Turn on/off the');
outtextxy(160,270,' net;');
outtextxy(160,285,' END-View/delete the figures');
outtextxy(160,300,' F1- Help;');
outtextxy(160,315,' Arrows UP/DOWN-Increase/ ');
outtextxy(160,330,' lower the scale;');
outtextxy(160,360,'Press ENTER to continue.');
end;
readln;
setcolor(15);
end;
procedure graphik(ea:word;a,b:real;f1:string);
{процедура построения графиков}
var
f,f2:string;
d:char;
i,v,r:integer;
x1,x2,n,p,x:integer;
c,k,k1:longint;
y:array[0..1] of double;
begin
x1:=-240;
x2:=240;
c:=24;
setcolor(15);
n:=0;v:=0;r:=0;
repeat
cleardevice;
settextstyle(0,0,0);
if ea mod 2 =0 then
begin
outtextxy(10,1,'Нажмите F1 для помощи');
str(c/24:2:2,f);
f:='Масштаб '+f+':1';
end
else
begin
outtextxy(10,1,'Press F1 for help');
str(c/24:2:2,f);
f:='Scale '+f+':1';
end;
outtextxy(200,1,f);
settextstyle(3,0,1);
outtextxy(307,10,'y');
outtextxy(574,235,'x');
outtextxy(310,240,'0');
setlinestyle(1,7,100);
line(70,240,580,240);
line(320,20,320,460);
line(320,20,315,25);
line(321,20,326,25);
line(580,239,575,244);
line(580,240,575,235);
line(70,239,580,239);
line(321,20,321,460);
for i:=-9 to 10 do
begin
if ((320+i*24)<561 ) and ((320+i*24)>71) then
line(320+i*24,240,320+i*24,242);
if ((240+i*24)<461 )and(240+i*24>19) then
line(320,240+i*24,322,240+i*24);
end;
setcolor(15);
for x:= -240+round((240+x1)/10) to 240+round((240+x1)/10) do
begin
funktia(1,x-1,x,y,c,f1);
k:=round(240-(y[0])*c);
k1:=round(240-(y[1])*c);
if ((k<480 )and(k>0)or(k1<480 )and(k1>0)) then
line(319-round((240+x1)/10)+x,k,320-round((240+x1)/10)+x,k1);
end;
if (v mod 2)=0 then
begin
funktia(1,a,b,y,1,f1);
k:=round(240-(y[0])*c);
k1:=round(240-(y[1])*c);
line(320-round((240+x1)/10)+round(a*c),k,320-round((240+x1)/10)+round(a*c),240);
line(320-round((240+x1)/10)+round(b*c),k1,320-round((240+x1)/10)+round(b*c),240);
if 320-round((240+x1)/10)+a*c<80 then
begin
funktia(1,-240/c,240/c,y,1,f1);
k:=round(240-(y[0])*c);
line(80,k,80,240);
end;
if 320-round((240+x1)/10)+b*c>560 then
begin
funktia(1,(-240-round((240+x1)/10))/c,(240-round((240+x1)/10))/c,y,1,f1);
k1:=round(240-(y[1])*c);
line(560,k1,560,240);
end;
for x:= -240 to 240 do
begin
funktia(1,x-1,x,y,c,f1);
k1:=round(240-(y[1])*c);
if ((x/c)>a) and ((x/c)0) then
begin
if (abs(240-k1)>2) then
begin
if k1<240 then
k1:=k1+1
else
k1:=k1-1;
if c>7 then
setfillstyle(6,3)
else
setfillstyle(1,3);
floodfill(320-round((240+x1)/10)+x,k1,15);
end;
end;
end;
end;
str(x1,f2);
outtextxy(1,450,f2);
if (n mod 2)=0 then
for i:=-9 to 10 do
begin
settextstyle(2,0,2);
setcolor(14);
if ((320+i*24)<561 ) and ((320+i*24)>71)and(i<>0) then
begin
str((i*24+round((240+x1)/10))/c:2:2,f);
p:=247;
outtextxy(310+i*24,p,f);
str(-i*24/c:2:2,f);
outtextxy(330,240+i*24,f);
end;
end;
for i:=-9 to 10 do
begin
setcolor(15);
if ((r mod 2)=1) and (i<>0) then
begin
if ((320+i*24)<561 ) and ((320+i*24)>71) then
line(320+i*24,20,320+i*24,460);
if ((240+i*24)<461 )and(240+i*24>19) then
line(80,240+i*24,560,240+i*24);
end;
end;
setcolor(15);
d:=readkey;
case d of
#75:
begin
x1:=x1-30;
x2:=x2-30;
end;
#77:
begin
x1:=x1+30;
x2:=x2+30;
end;
#80:
if c>1 then
c:=c-1;
#72:
c:=c+1;
#71:
c:=24;
#79:
n:=n+1;
#83:
r:=r+1;
#82:
v:=v+1;
#73:
begin
c:=24;
n:=0;r:=0;v:=0;x1:=-240;x2:=240;
end;
#59:
hwg(ea);
end;
until d=#13;
end;
end.
================================================
==========МОДУЛЬ UNIT==========
================================================
{$N+}
Unit k_unit;
{Модуль нахождения интеграл от многочлена q(q-1)..(q-i+1)(q-i-1)..(q-n),}
{где n-точность интеграла ,i-номер коофициента. }
interface
procedure rasposn(f:string;x:real;var ec:word;var t:real);
procedure hkoef(n:integer;var h:array of double);
procedure funktia(n:integer;a,b:real;var y:array of double;c:real;f:string);
procedure koef(w:array of double;n:integer;var e:array of double);
procedure mnogochlen(n,i:integer;var c:array of double);
function facktorial(n:integer):double;
function integral(w:array of double;n:integer):double;
function mainint(n:integer;a,b:real;y:array of double):double;
implementation
procedure rasposn(f:string;x:real;var ec:word;var t:real);
{Процедура распознования функции}
var
k:word;
begin
k:=pos('x',f);
if k<>0 then
begin {Распознавание функции}
ec:=1; {Код ошибки}
t:=x;
k:=pos('abs(x)',f);
if k<>0 then t:=abs(x);
k:=pos('sin(x)',f);
if k<>0 then t:=sin(x);