unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, math, Matfu;


type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Memo1: TMemo;
    RadioGroup1: TRadioGroup;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form1: TForm1;
  xn,xk,e : extended;
  m:word;
  k:integer;
implementation
{$R *.dfm}



function sx(x:extended):extended ;
var n:integer;
    a,s,b,c,d:extended;
begin
    a:=-1;  s:=0;  n:=0; b:=-1; c:=1; d:=1;
 try
 while (abs(a) > e) do begin
               n:=n+1;
               b:=b*(-1);
               c:=c*x*x;
               d:=d*((2*n-1)*n);
               a:=b*c/(2*d);
               s:=s+a;
  end;
  result:=s;

  except
    on EInvalidOp do k:=MessageDlg('Неправильная операция с плавающей точкой.'+'Продолжить вычисления?',mtError,[mbYes,mbNo],0);
    on EOverFlow do k:=MessageDlg('Переполнение при операции с '+' плавающей точкой. Продолжить вычисления?',mtError,[mbYes,mbNo],0)
    else k:=MessageDlg('Возникла неизвестная исключительная ситуация.'+'Продолжить вычисления?',mtError,[mbYes,mbNo],0);
  end;

  case k of
     mrYes: Result:=0;
     mrNo: Halt(1);
  end;
  end;



 function yx(x:extended):extended;
 begin
 result:=x*arctan(x)-ln(sqrt(1+sqr(x)));
 end;



 procedure TForm1.FormCreate(Sender: TObject);
 begin
  memo1.clear;
  radiogroup1.Itemindex:=0;
  Edit1.text:='0,1';
  Edit2.text:='0,8';
  Edit3.text:='6';
  Edit4.text:='0,001';
 end;



procedure   TForm1.BitBtn1Click(Sender: TObject);
begin
   Memo1.clear;
   xn:=StrToFloat(Edit1.Text);
   Memo1.Lines.Add(' xn='+FloatToStrF(xn,ffFixed,6,2));
   xk:=StrToFloat(Edit2.Text);
   Memo1.Lines.Add(' xk='+FloatToStrF(xk,ffFixed,6,2));
   m:=StrToint(Edit3.Text);
   Memo1.Lines.Add(' h='+FloatToStrF(m,ffFixed,8,3));
   e:=StrToFloat(Edit4.Text);
   Memo1.Lines.Add(' e='+FloatToStrF(e,ffFixed,8,5));



case radiogroup1.itemindex of
   0: begin
   memo1.Lines.Add('расчет S(x)');
   Tabl(sx,xn,xk,m,Memo1);
end;
   1:  begin
   memo1.Lines.Add('расчет Y(x)');
   Tabl(yx,xn,xk,m,Memo1);
end;
end;
end;

procedure   TForm1.BitBtn2Click(Sender: TObject);
begin
halt;
end;
end.
