Доброго времени суток. Вот такая задача...посчитать тремя методами(Симсона,трапеций и прямоугольников) определёный интеграл от arctg(x)/x .Никогда не сталкивался с арктангенсом...никак не пойму что у меня не так...вот текст програмы:
type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; RadioGroup1: TRadioGroup; Button1: TButton; Label5: TLabel; Edit4: TEdit; function fnk(x:real):real; function Metod1(a,b,e:real):real; function Metod2(a,b,e:real):real; function Metod3(a,b,e:real):real; procedure Button1Click(Sender: TObject); function ArcTan(x:real):real; private { Private declarations } public { Public declarations } end;
var Form1: TForm1; a,b,e,x:real; implementation
{$R *.dfm}
function Tform1.fnk(x:real):real; begin fnk:=(ArcTan(x))/x; end;
function TForm1.Metod1(a,b,e:real):real; var i,n:integer; h,Spred,Stek,Cht,Ncht:real; begin n:=16; h:=(b-a)/n; Result:=fnk(a)+fnk(b); Spred:=0; Repeat x:=a; h:=(b-a)/n; Stek:=0; Cht:=0; Ncht:=0; For i:=1 to n do begin if (i mod 2)=0 then Cht:=Cht+fnk(x) Else Ncht:=Ncht+fnk(x); x:=x+h; end; Stek:=h/3*(Result+2*Cht+4*Ncht); if (abs(Spred-Stek)>e) then begin n:=n*2; Spred:=Stek; end; Until (abs(Spred-Stek)<=e); Metod1:=Stek; end;
function Tform1.Metod2(a,b,e:real):real; var n:integer; Spred,h:real; begin n:=2; h:=b-a; Result:=fnk(a)*h; repeat Spred:=Result; h:=(b-a)/n; x:=a; result:=0; n:=2*n; while x<b do begin Result:=Result+fnk(x)*h; x:=x+h; end; until abs(Spred-Result)<=e; Metod2:=Result; end;
function TForm1.Metod3(a,b,e:real):real; var Spred,h:real; i,n:Integer; begin h:=b-a; Result:=(fnk(a)+fnk(b))/2*h; n:=1; repeat Spred:=Result; h:=h/2; n:=n*2; Result:=Result/2; for i := 1 to n div 2 do begin x:=a+h*(i*2-1); Result:=Result+fnk(x)*h; end; until abs(Spred-Result)<=e; Metod3:=Result; end;
procedure TForm1.Button1Click(Sender: TObject); var m:real; begin a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); e:=StrToFloat(Edit3.Text); Case RadioGroup1.ItemIndex of 0: m:=Metod1(a,b,e); 1: m:=Metod2(a,b,e); 2: m:=Metod3(a,b,e); end; Edit4.Text:=FloatToStr(m); end;
end.
Заранее спасибо)
Добавлено через 3 мин. Про компиляции пишет такие ошибки:
[Error] Unit1.pas(27): Unsatisfied forward or external declaration: 'TForm1.ArcTan' [Fatal Error] Project1.dpr(5): Could not compile used unit '..\progra\Unit1.pas'