uses crt, graph;
const
E=0.0001;
var
grdriver:integer;
grMode:integer;
Fa,Fb,h,x,g,y,n,tg ,a,b,i,s,Sn:real;
begin
grDriver:=Detect;
InitGraph(grDriver, grMode,' ');
clearDevice;
outtextXY(0,0,'"Prymoygolnika"');
readln;
closegraph;
n:=1;
a:=0;
b:=1.57;
grDriver:=Detect;
InitGraph(grDriver, grMode,' ');
If GraphResult<>grOk then Halt;
clearDevice;
line(320,0,320,480);
line(0,240,640,240);
Fa:=a*tg*(a/2);
Fb:=b*tg*(b/2);
SN:=(Fa+Fb)/2*(A+B);
repeat
h:=(B-A)/n;
S:=0;
x:=a+h;
repeat
S:=S+x*tg*(x/2);
x:=x+h;
Until x>b;
S:=S*h;
g:=sn;
n:=2*n;
Until (abs(S-g)/3)<E;
x:=a;
repeat
y:=x*tg*(x/2);
putpixel(310+round(x*10),230+round(y*10),red);
x:=x+0.001;
Until x>b;
x:=a;
repeat
y:=x*tg*(x/2);
line(310+round(x*10),230+round(y*10),310+round(x*10),240);
x:=x+0.5;
Until x>=b+0.5;
readln;
ClearDevice;
CloseGraph;
Fa:=a*tg*(a/2);
Fb:=b*tg*(b/2);
writeln('S=',s:2:5);
writeln('N=',n:2:5);
readln;
end.
Метод прямоугольника
Код:
вот задание если, что...Вычислить определенный интеграл с заданной точностью..вывести на экран значения интеграла,кол-во разбиений, значение первообразной. Нарисовать график подынтегральной ф-ции.
Проблема в том, график криво выводится( не уверен, что функция правильно написана
первообразная
xtg*x/2
В этом месте надо писать не первообразную, а саму подынтегральную функцию :
S:=S+x*tg*(x/2);
Во вторых: tg*(x/2) - значит переменную tg (да еще и с незаданным значением) умножить на x/2. Ведь тангенс - это функция, а не переменная. В Turbo Pascal, насколько я помню, тангенса нет, так что надо писать sin(x)/cos(x)
вот функция
я менял тангенс..вообще ничего не выводит..только оси и все(
Код:
uses graph;
const xn=-0;
xk=pi/2;
function F(x:real):real;
begin
F:=(x+sin(x)/(1+cos(x)));
end;
var mx,my,x,dx,y:real;
grD,grM,x0,y0,i,px,py:integer;
s:string;
begin
grD:=detect;{инициализация графического режима}
initgraph(grD,grM,'');
X0:=50;{начало координат в центре экрана}
Y0:=getmaxY-60;
{коэффициенты по осям для перевода реальных координат в экранные}
mx:=(getmaxX-80)/(xk-xn);
my:=(y0)/F(xk);
line(0,y0,getmaxX,y0); {ось Х}
line(x0,getmaxy,x0,0); {ось У}
for i:=1 to round(F(xk)*10) do {максимальное количество засечек в одну сторону}
begin
{подриси оси Х}
line(x0+round(i*mx/10),y0-3,x0+round(i*mx/10),y0+3); {засечки на оси Х}
str(i/10:0:1,s);
outtextXY(x0+round(i*mx/10),y0+10,s);
{подписи оси Y}
line(x0-3,y0-round(i*my/10),x0+3,y0-round(i*my/10));
str(i/10:0:1,s);
outtextXY(x0-40,y0-round(i*my/10),s);
end;
{центр}
outtextXY(x0+5,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0-10,10, 'Y');
dx:=0.001;
{график}
x:=xn;
while x<=xk do
begin
px:=x0+round(x*mx); {изменение по оси Х}
y:=F(x); {график в реальных координатах}
py:=y0-round(y*my);{в экранных}
putpixel(px,py,12);{график красным}
x:=x+dx; {наращиваем х}
end;
readln
end.
const xn=-0;
xk=pi/2;
function F(x:real):real;
begin
F:=(x+sin(x)/(1+cos(x)));
end;
var mx,my,x,dx,y:real;
grD,grM,x0,y0,i,px,py:integer;
s:string;
begin
grD:=detect;{инициализация графического режима}
initgraph(grD,grM,'');
X0:=50;{начало координат в центре экрана}
Y0:=getmaxY-60;
{коэффициенты по осям для перевода реальных координат в экранные}
mx:=(getmaxX-80)/(xk-xn);
my:=(y0)/F(xk);
line(0,y0,getmaxX,y0); {ось Х}
line(x0,getmaxy,x0,0); {ось У}
for i:=1 to round(F(xk)*10) do {максимальное количество засечек в одну сторону}
begin
{подриси оси Х}
line(x0+round(i*mx/10),y0-3,x0+round(i*mx/10),y0+3); {засечки на оси Х}
str(i/10:0:1,s);
outtextXY(x0+round(i*mx/10),y0+10,s);
{подписи оси Y}
line(x0-3,y0-round(i*my/10),x0+3,y0-round(i*my/10));
str(i/10:0:1,s);
outtextXY(x0-40,y0-round(i*my/10),s);
end;
{центр}
outtextXY(x0+5,y0+10,'0');
{подписи концов осей}
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0-10,10, 'Y');
dx:=0.001;
{график}
x:=xn;
while x<=xk do
begin
px:=x0+round(x*mx); {изменение по оси Х}
y:=F(x); {график в реальных координатах}
py:=y0-round(y*my);{в экранных}
putpixel(px,py,12);{график красным}
x:=x+dx; {наращиваем х}
end;
readln
end.
вот вроде с графикой разобрался...как теперь арифметику вставить..правильно высчитать(