Finally

CloseFile(f);

end;

end;

Пример 20. Расчет значений функции на интервале [xn,xk] с шагом h. Изменим пример следующим образом: на форму поместим компонент для ввода шага расчета (LabeledEdit).

Все места программы, в которых может возникнуть ошибка, возьмем в блоки обработки исключительных ситуаций. Ошибка при конвертации текстовых значений в значения вещественного типа может возникнуть при вводе интервала и шага расчета. При записи в файл может возникнуть ошибка, поэтому в любом случае необходимо предусмотреть разрыв файловой переменной и места на диске. С учетом вышесказанного, код программы нажатия на кнопку изменился следующим образом:

procedure TForm1.BitBtn1Click(Sender: TObject);

var

xn,xk,y,h:real;

i:integer;

Raschet:TextFile;

flag:boolean;

begin

Try

xn:=StrToFloat(Form1.LabeledEdit1.Text);

xk:=StrToFloat(Form1.LabeledEdit2.Text);

h:=StrToFloat(Form1.LabeledEdit4.Text);

Except

on EConvertError do MessageDlg('Ошибка в записи

числа',mtError,[mbOK],0);

end;

if h<=0 then

begin

MessageDlg('Ошибка в записи шага',

mtError,[mbOK],0);

exit;

end;

case Form1.RadioGroup1.ItemIndex of

0:begin

Form1.StringGrid1.Visible:=true;

Form1.Chart1.Visible:=false;

Form1.StringGrid1.Cells[0,0]:=' x ';

Form1.StringGrid1.Cells[1,0]:=' y ';

for i:=1 to Form1.StringGrid1.RowCount-1 do

begin

Form1.StringGrid1.Cells[0,i]:='';

Form1.StringGrid1.Cells[1,i]:='';

end;

i:=1;

while xn<=xk do

begin

y:=xn*xn;

if i>Form1.StringGrid1.RowCount

then Form1.StringGrid1.RowCount:=

Form1.StringGrid1.RowCount+1;

Form1.StringGrid1.Cells[0,i]:=

FloatToStr(xn);

Form1.StringGrid1.Cells[1,i]:=

FloatToStr(y);

xn:=xn+h;

inc(i);

end;

end;

1:begin

Form1.Chart1.SeriesList.Series[0].Clear;

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=true;

while xn<=xk do

begin

y:=xn*xn;

Form1.Chart1.SeriesList.

Series[0].AddXY(xn,y,'',clRed);

xn:=xn+h;

end;

end;

2:begin

Form1.StringGrid1.Visible:=false;

Form1.Chart1.Visible:=false;

if Form1.SaveDialog1.Execute then

begin

Try

AssignFile(Raschet,

Form1.SaveDialog1.FileName);

Rewrite(Raschet);

while xn<=xk do

begin

y:=xn*xn;

WriteLn(Raschet,FloatToStr(xn)+'

'+FloatToStr(y));

xn:=xn+h;

end;

Finally

CloseFile(Raschet);

end;

end;

end;

end;

end;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: