Смекни!
smekni.com

Вычисление интеграла методом Ньютона-Котеса (теория и программа на Паскале) (стр. 3 из 5)

bar(80,285,330,305);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,'В этом способе необходимо');

outtextxy(360,155,'самостоятельно вводить');

outtextxy(360,170,'значения функции.');

end

else

begin

outtextxy(360,140,'In this method you have');

outtextxy(360,155,'to put in values of ');

outtextxy(360,170,'function by yourself.');

end;

end

else

begin

bar(80,285,330,305);

setfillstyle(1,5);

bar(80,250,330,270);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,'В этом способе компьютер');

outtextxy(360,155,'сам вычесляет значения');

outtextxy(360,170,'функции по вводимой функции.');

end

else

begin

outtextxy(360,140,'In this method PC will');

outtextxy(360,155,'automaticly count the value');

outtextxy(360,170,'of function by the function');

outtextxy(360,185,'you enter ');

end;

end;

setcolor(2);

if ea mod 2 =0 then

begin

outtextxy(70,255,' По таблице(в ручную)');

outtextxy(70,295,' По расчетам(автом т.)');

end

else

begin

outtextxy(70,255,' By the table(by hand)');

outtextxy(70,295,' By calculations(automat.)');

end;

end;

until c=#13;

k:=x mod 2;

end;

procedure wwod1(ea:word;var y:array of double;var n:integer;var a,b:real);

{Окно ручного ввода функции}

var

i,p:integer;

s,f:string;

p1:real;

c:char;

begin

wwodn(ea,n);

if n=0 then

wwodn(ea,n);

newsc(ea);

wwodab(ea,a,b);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,'В этом окне необходимо');

outtextxy(360,155,'постепенно вводить');

outtextxy(360,170,'значения функции.');

outtextxy(360,185,'после каждого ввода');

outtextxy(360,200,'определенного значения');

outtextxy(360,215,'нажмите ENTER.');

end

else

begin

outtextxy(360,140,'In this window you have');

outtextxy(360,155,'to gradually enter the');

outtextxy(360,170,'values of functions.');

outtextxy(360,185,'After each enter press');

outtextxy(360,200,'ENTER key.');

end;

setfillstyle(1,9);

bar(40,200,330,300);

rectangle(45,205,325,295);

rectangle(47,207,323,293);

if ea mod 2 =0 then

outtextxy(56,227,'Введите 0 -е значение финкции:')

else

outtextxy(56,227,' Enter 0 -th value of function:');

for i:=0 to n do

begin

setfillstyle(1,0);

bar(137,250,180,273);

gotoxy(19,17);

setfillstyle(1,9);

read(p1);

y[i]:=p1;

bar(120,227,134,240);

str(i+1,s);

outtextxy(120,227,s);

bar(310,220,320,250);

end;

end;

procedure wwod2(ea:word;var ea1:word;var n:integer;var a,b:real;var st:string);

{Окно 2 меню автомат. подсчета}

var

i:integer;

c,k:char;

x:longint;

f:string;

begin

repeat

x:=-600000;

if keypressed then

c:=readkey;

c:='t';

newsc(ea);

setfillstyle(1,15);

bar(70,120,342,330);

setcolor(12);

rectangle(75,125,337,325);

rectangle(77,127,335,323);

settextstyle(0,0,0);

setfillstyle(1,11);

bar(80,170,330,190);

if ea mod 2 =0 then

begin

outtextxy(80,130,'Меню ввода параметров нахождения');

outtextxy(80,140,' интеграла');

outtextxy(80,180,' Ввести количество узлов(n)');

outtextxy(80,210,' Ввести приделы интегрирования');

outtextxy(80,240,' Ввести функцию');

outtextxy(80,270,' Считать интеграл');

outtextxy(80,300,' Выход ');

end

else

begin

outtextxy(80,130,'Menu of entering the parameters');

outtextxy(80,140,' of integral');

outtextxy(80,180,' Put in the number of units ');

outtextxy(80,210,' Enter the bounds of integral');

outtextxy(80,240,' Enter function');

outtextxy(80,270,' Count integral');

outtextxy(80,300,' Exit ');

end;

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,' Нажмите Enter для');

outtextxy(360,155,' ввода количества узлов');

end

else

begin

outtextxy(360,140,' Press Enter to put');

outtextxy(360,155,' in the number of units');

end;

repeat

if keypressed then

begin

c:=readkey;

case c of

#80:

x:=x-1;

#72:

x:=x+1;

end;

setfillstyle(1,11);

case (abs(x) mod 5) of

0:

begin

bar(80,170,330,190);

setfillstyle(1,15);

bar(80,200,330,220);

bar(80,290,330,310);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,' Нажмите Enter для');

outtextxy(360,155,' ввода количества узлов');

end

else

begin

outtextxy(360,140,' Press Enter to put');

outtextxy(360,155,'in the number of units.');

end;

end;

1:

begin

bar(80,200,330,220);

setfillstyle(1,15);

bar(80,170,330,190);

bar(80,230,330,250);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,' Нажмите ENTER для ввода');

outtextxy(360,155,'приделов интегрирования.');

end

else

begin

outtextxy(360,140,' Press ENTER to put in');

outtextxy(360,155,'the bounds of integral.');

end;

end;

2:

begin

bar(80,230,330,250);

setfillstyle(1,15);

bar(80,200,330,220);

bar(80,260,330,280);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,' Нажмите ENTER для ввода');

outtextxy(360,155,'функции.');

end

else

begin

outtextxy(360,140,' Press ENTER to enter');

outtextxy(360,155,'function.');

end;

end;

3:

begin

bar(80,260,330,280);

setfillstyle(1,15);

bar(80,230,330,250);

bar(80,290,330,310);

helpwin(ea);

if ea mod 2 =0 then

begin

outtextxy(360,140,' Нажмите ENTER для начала');

outtextxy(360,155,'подсчета самого интеграла.');

end

else

begin

outtextxy(360,140,' Press ENTER to begin');

outtextxy(360,155,'integral calculations.');

end;

end;

4:

begin

bar(80,290,330,310);

setfillstyle(1,15);

bar(80,260,330,280);

bar(80,170,330,190);

helpwin(ea);

end;

end;

setcolor(12);

if ea mod 2 =0 then

begin

outtextxy(80,130,'Меню ввода параметров нахождения');

outtextxy(80,140,' интеграла');

outtextxy(80,180,' Ввести количество узлов(n)');

outtextxy(80,210,' Ввести приделы интегрирования');

outtextxy(80,240,' Ввести функцию');

outtextxy(80,270,' Считать интеграл');

outtextxy(80,300,' Выход ');

end

else

begin

outtextxy(80,130,'Menu of entering the parameters');

outtextxy(80,140,' of integral');

outtextxy(80,180,' Put in the number of units ');

outtextxy(80,210,' Enter the bounds of integral');

outtextxy(80,240,' Enter function');

outtextxy(80,270,' Count integral');

outtextxy(80,300,' Exit ');

end;

end;

until c=#13;

c:='t';

case (abs(x) mod 5) of

0:

begin

wwodn(ea,n);

end;

1:

wwodab(ea,a,b);

2:

begin

helpwin(ea);

setcolor(15);

setfillstyle(1,9);

bar(70,200,340,300);

rectangle(75,205,335,295);

rectangle(77,207,333,293);

if ea mod 2 =0 then

begin

outtextxy(86,227,'Введите функцию f(x):');

setcolor(14);

outtextxy(360,140,' В этом окне необходимо');

outtextxy(360,155,' ввести саму функцию.');

outtextxy(360,200,'Примечание: 1.данная программа ');

outtextxy(360,215,'распознает только ');

outtextxy(360,230,'элементарные функции.');

outtextxy(360,245,'(x,cos(x) и др.)');

outtextxy(360,260,’2.При неправильном вводе’);

outtextxy(360,275,’по умолчанию f(x)=x;’);

outtextxy(360,275,’3.Если после нажатия ENTER’);

outtextxy(360,275,’ничего не произошло, то

outtextxy(360,275,’занововведите функцию.’);

end

else

begin

outtextxy(86,227,'Enter function f(x):');

setcolor(14);

outtextxy(360,140,' In this window you have');

outtextxy(360,155,' to enter the function.');

outtextxy(360,200,'Note: This version of ');

outtextxy(360,215,'programm can indentify only ');

outtextxy(360,230,'simple functions, as');

outtextxy(360,245,'x,cos(x) and other.');

end;

setfillstyle(1,0);

bar(86,255,330,275);

readln;

gotoxy(13,17);

read(st);

writeln(st);

readln;

end;

3:if (n<=0)or(a=b)or(st='') then

error(ea);

4:

halt;

end;

until (n>0)and(a<>b)and(st<>'')and((abs(x) mod 5)=3);

end;

procedure win3(ea:word;n:integer;a,b:real;int:double;f:string;h:array of double;var k:word);

{Последнее окно просмотра результатов}

var

i:integer;

c:char;

x:longint;

p1,p:string;

y:array[0..16] of double;

begin

funktia(n,a,b,y,1,f);

f:='('+f+')'+'dx =';

repeat

x:=-600000;

newsc(ea);

setfillstyle(1,2);

bar(170,120,490,360);

setcolor(14);

rectangle(175,125,485,355);

rectangle(177,127,483,353);

settextstyle(0,0,0);

setfillstyle(1,1);

bar(180,170,480,190);

if ea mod 2 =0 then

begin

outtextxy(180,135,Функция распознана.Интеграл подсчитан.');

outtextxy(180,180,' Посмотреть значение интеграла');

outtextxy(180,210,'Посмотреть коэффициенты Ньютона-Котеса');

outtextxy(180,240,' Посмотреть значения функции');

outtextxy(180,270,' Посмотреть график' );

outtextxy(180,300,' Считать снова');

outtextxy(180,330,' Выход ');

end

else

begin

outtextxy(180,135,'Function Indentified.Integral counted.');

outtextxy(180,180,' View value of integral');

outtextxy(180,210,' View Newton-Cotes coefficients');

outtextxy(180,240,' Veiw values of function');

outtextxy(180,270,' View graphik ' );

outtextxy(180,300,' Count again');

outtextxy(180,330,' Exit ');

end;

repeat

if keypressed then

begin

c:=readkey;

case c of

#80:

x:=x-1;

#72:

x:=x+1;

end;

setfillstyle(1,1);

case (abs(x) mod 6) of

0:

begin

bar(180,170,480,190);

setfillstyle(1,2);

bar(180,200,480,220);

bar(180,320,480,340);

end;

1:

begin

bar(180,200,480,220);

setfillstyle(1,2);

bar(180,170,480,190);

bar(180,230,480,250);

end;

2:

begin

bar(180,230,480,250);

setfillstyle(1,2);

bar(180,200,480,220);

bar(180,260,480,280);

end;

3:

begin

bar(180,260,480,280);

setfillstyle(1,2);

bar(180,230,480,250);

bar(180,290,480,310);

end;

4:

begin

bar(180,290,480,310);

setfillstyle(1,2);

bar(180,260,480,280);

bar(180,320,480,340);

end;

5:

begin

bar(180,320,480,340);

setfillstyle(1,2);

bar(180,290,480,310);

bar(180,170,480,190);

end;

end;

if ea mod 2 =0 then

begin

outtextxy(180,135,'Функция распознана.Интеграл подсчитан.');

outtextxy(180,180,' Посмотреть значение интеграла');

outtextxy(180,210,'Посмотреть коэффициенты Ньютона-Котеса');

outtextxy(180,240,' Посмотреть значения функции');

outtextxy(180,270,' Посмотреть график ' );

outtextxy(180,300,' Считать снова');

outtextxy(180,330,' Выход ');

end

else

begin

outtextxy(180,135,'Function Indentified.Integral counted.');

outtextxy(180,180,' View value of integral');

outtextxy(180,210,' View Newton-Cotes coefficients');

outtextxy(180,240,' Veiw values of function');

outtextxy(180,270,' View graphik ' );

outtextxy(180,300,' Count again');

outtextxy(180,330,' Exit ');

end;

end;

until c=#13;

c:='t';

case (abs(x) mod 6) of

0:begin

setcolor(15);

setfillstyle(1,12);

bar(140,200,490,280);

rectangle(145,205,485,275);

rectangle(147,207,483,273);

settextstyle(2,0,1);

setusercharsize(1,1,5,1);

outtextxy(170,210,'S');

settextstyle(2,0,4);

str(a:3:3,p);

outtextxy(160,257,p);

str(b:3:3,p);

outtextxy(160,212,p);

settextstyle(3,0,2);

outtextxy(180,224,f);

p:='';

str(abs(int):7:3,p);

outtextxy(190+length(f)*12,224,p);

readln;

end;

1:

begin

newsc(ea);

setfillstyle(1,2);

bar(170,120,490,180+n*15);

setcolor(14);

rectangle(175,125,485,175+n*15);

rectangle(177,127,483,173+n*15);

if ea mod 2 =0 then

begin

outtextxy(180,130,'Коэффициенты Ньютона-Котеса:');

outtextxy(180,140+(n+1)*15,'Нажмите ENTER для продолжения');

end

else

begin

outtextxy(180,130,'Newton-Cotes coefficients:');

outtextxy(180,140+(n+1)*15,'Press ENTER to continue');

end;

hkoef(n,h);

for i:=0 to n do

begin

str(i,p);str(h[i]:2:4,p1);

p:='H'+p+' = '+p1;

outtextxy(180,140+i*15,p);

end;

readln;

end;

2:begin

newsc(ea);

setfillstyle(1,2);

bar(170,120,490,180+n*15);

setcolor(14);

rectangle(175,125,485,175+n*15);

rectangle(177,127,483,173+n*15);

if ea mod 2 =0 then

begin

outtextxy(180,130,'Значения функции:');

outtextxy(180,140+(n+1)*15,'Нажмите ENTER для продолжения');

end

else

begin

outtextxy(180,130,'Values of function:');

outtextxy(180,140+(n+1)*15,'Press ENTER to continue');

end;

for i:=0 to n do

begin

str(i,p);str(y[i]:2:4,p1);

p:='Y'+p+' = '+p1;

p1:='';

outtextxy(180,140+i*15,p);

str((a+i*(b-a)/n):2:4,p1);

str(i,p);

if ea mod 2 = 0 then

p:=',При '+'X'+p+' = '+p1

else

p:=',When '+'X'+p+' = '+p1;