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 doMessageDlg('Ошибка в записи
числа',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;
Дата добавления: 2015-04-10; просмотров: 727;