unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    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,n,s: extended;
    k: integer;
begin
  k:=-1;
  a:=x;
  n:=0;
  s:=x;
  try
    while (abs(a)>e) do begin
     n:=n+1;
              a:=((-a)*x*x)/(2*n*(2*n+1));
              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:=sin(x);
end;

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

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Memo1.Clear;
  Memo1.Lines.Add('ыыы');
  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('m='+IntToStr(m));
  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.
