Тексты модуля
Листинг 5.1
unit matfu;
interface
uses StdCtrls, SysUtils;
Type
fun = function(x : extended):extended; // Объявление типа функция
{Расчет таблицы функции f (табуляция функции)}
procedure Tabl(f:fun;xn,xk:extended; m: word; Mem1 : TMemo);
implementation
procedure Tabl;
var x,y,h: extended;
i : integer;
begin
x:=xn; h:=(xn-xk)/m;
for i:=1 to m+1 do begin
y:=f(x);
Mem1.Lines.Add(' x='+FloatToStrf(x,fffixed,8,3)+
' y='+FloatToStrf(y,fffixed,8,3));
x:=x+h;
end;
end;
end. // Конец модуля matfu
// программа
unit Unit6;
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);
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:=1; n:=0; s:=1;
try
while (abs(a) > e) do begin
n:=n+1;
a:=-a*x/n;
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:=exp(-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('Лаб. раб. №6 ст. гр. 552003 Иванова А.А.');
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(' 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;
end.