unit Unit1;

interface

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

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

var
  Form1: TForm1;
  xn,xk,e,h:extended;
  m:word;

implementation

{$R *.dfm}

function sx(x:extended):extended;
var
  a,n,s:extended;
  k:integer;
begin
  k:=-1;
  a:=1;
  s:=cos(0);
  n:=0;
  try
    while abs(a)>e do
    begin
      n:=n+1;
      a:=a*x/n;
      s:=s+a*cos(n*Pi/4);
    end;
    sx:=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
  yx:=exp(x*cos(Pi/4))*cos(x*sin(Pi/4));
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;
  try
    xn:=StrToFloat(Edit1.Text);
    xk:=StrToFloat(Edit2.Text);
    m:=StrToInt(Edit3.Text);
    e:=StrToFloat(Edit4.Text);
  except
    on EConvertError do Exit;
  end;
  Memo1.Lines.Add('xn='+Edit1.Text);
  Memo1.Lines.Add('xk='+Edit2.Text);
  Memo1.Lines.Add('m='+Edit3.Text);
  memo1.Lines.Add('e='+Edit4.Text);
  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;

end.
