unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    RadioGroup1: TRadioGroup;
    Memo1: TMemo;
    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;
implementation

{$R *.dfm}
  Function sx(x:extended):extended;
  var a,s:extended;
k,n:integer;
 begin
a:=x/6; n:=1; s:=x/6; k:=-1;
try
 while (abs(a) > e) do begin
        n:=n+1;
        a:=a*x/((2*n+1)*2*n);
        s:=s+a*sqr(n);
        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+1)/sqrt(x)*sinh(sqrt(x))-cosh(Sqrt(x)))/4;
    end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
  RadioGroup1.ItemIndex:=0;
   Edit1.Text:='0,2';
   Edit2.Text:='0,8';
   Edit3.Text:='6';
   Edit4.Text:='0,0001';
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Memo1.Clear;
  Memo1.Lines.Add('Лаб.раб.6 ст.гр.020603 Щвеца М.Э.');
  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='+IntToStr(m));
  e:=StrToFloat(Edit4.Text);
   Memo1.Lines.Add('Xn='+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
 close
end;

end.
