Vladimir_S |
25.05.2010 23:17 |
Цитата:
Сообщение от anonimka
(Сообщение 338600)
Вообще желательно в одну,где график будет занимать большую часть экрана.
Задать параметры функции InitGraph я смогу.
|
Тогда, например, как-то так:
Код:
USES Graph,CRT;
VAR
Xmin,Xmax,X,dX,Epsilon1,Epsilon2,b,Xbef,Xaft,AV:REAL;
XgrMin,XgrMax,YgrMin,YgrMax,StepGridX,StepGridY:WORD;
ScaleX,ScaleY:REAL;
Function f1(xf:Real):Real;
VAR S,a:Real;
k:Word;
begin
S:=0;
a:=1;
k:=1;
Repeat
S:=S+a;
a:=a*xf/k;
Inc(k);
Until Abs(a)<Epsilon1;
f1:=S;
end;
Function f2(xf:Real):Real;
begin
f2:=Exp(xf)+b;
end;
BEGIN
Write('Xmin= ');
ReadLn(Xmin);
Write('Xmax= ');
ReadLn(Xmax);
Write('dX= ');
ReadLn(dX);
Write('Epsilon1= ');
ReadLn(Epsilon1);
Write('Epsilon2= ');
ReadLn(Epsilon2);
Repeat
Write('b= ');
ReadLn(b);
If b>=0 then WriteLn('Incorrect value of b!!! It must be <0');
Until b<0;
{ Newton calculation }
Xaft:=0;
Repeat
Xbef:=Xaft;
Xaft:=Xbef-f2(Xbef)/Exp(Xbef);
Until ABS(Xbef-Xaft)<Epsilon2;
WriteLn('The result of Newton calculation is ',Xaft);
AV:=Ln(-b);
WriteLn('The accurate value is ',AV);
WriteLn;
WriteLn('Press "Enter" to continue...');
ReadLn;
{Здесь нужно инициализировать графический режим}
ClearDevice;
ScaleX:=600/(Xmax-Xmin);
ScaleY:=400/(f1(Xmax)-f2(Xmin));
Line(40,ROUND(f1(Xmax)*ScaleY),640,ROUND(f1(Xmax)*ScaleY));
If Xmin>0 then
Line(40,0,40,440)
else
Line(40-Round(Xmin*ScaleX),0,40-Round(Xmin*ScaleX),440);
SetLineStyle(SolidLn,0,ThickWidth);
SetColor(11);
MoveTo(40,ROUND((f1(Xmax)-f1(Xmin))*ScaleY));
X:=Xmin;
Repeat
X:=X+dX;
LineTo(40+Round((X-Xmin)*ScaleX),ROUND((f1(Xmax)-f1(X))*ScaleY));
Until ROUND(X*10000)=ROUND(Xmax*10000);
SetColor(14);
MoveTo(40,ROUND((f1(Xmax)-f2(Xmin))*ScaleY));
X:=Xmin;
Repeat
X:=X+dX;
LineTo(40+Round((X-Xmin)*ScaleX),ROUND((f1(Xmax)-f2(X))*ScaleY));
Until ROUND(X*10000)=ROUND(Xmax*10000);
ReadKey;
CloseGraph;
END.
Вы уж не взыщите, но заниматься дальнейшим украшательством типа числовой разметки осей возможности нет.
Несколько пояснений:
Epsilon1 задает точность вычисления ряда Тейлора (кстати, на самом деле это просто разложение функции Exp(x)), Epsilon2 - точность определения корня уравнения методом Ньютона. Значения Xmax (верхний предел) следует брать небольшими, не выше 2 - 3.
|