Отладка программы в Delphi

       

Обработка исключения типа EZeroDivide



Листинг 13.1. Обработка исключения типа EZeroDivide

unit UsTry_;

interface

uses

Windows, Messages, SysUtils, Classes,

Graphics, Controls, Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Editl: TEdit; // напряжение

Edit2: TEdit; // сопротивление

Label5: TLabel; // результат расчета - ток

Button1: TButton; //кнопка Вычислить

procedure ButtonlClick(Sender: TObject);

private

{ Private declarations )

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

u: real; // напряжение

r: real; // сопротивление

i: real; // ток

begin

Labels.Caption := ' '; try

// инструкции, которые могут вызвать исключение (ошибку)

u := StrToFloat(Edit1.Text);

r := StrToFloat(Edit2.Text);

i := u/r;

except // секция обработки исключений

onEZeroDivide do // деление на ноль

begin

ShowMessage('Сопротивление не может быть равно нулю!');

exit;

end;

on EConvertError do // ошибка преобразования строки в число

begin

ShowMessage('Напряжение и сопротивление должны быть ' +

'заданы числом. ' +#13+

'При записи дробного числа используйте запятую.';

exit;

end;

end;

Label5.Caption := FloatToStr(i) + ' A';

end;

end.

В приведенной программе исключения могут возникнуть при вычислении величины тока. Если пользователь задаст, что сопротивление равно нулю, то при выполнении инструкции i:=u/r возникает Исключение EZeroDivide.

Если неверно будет введено числовое значение, например, для разделения целой и дробной частей числа вместо запятой будет использована точка, то возникнет исключение типа EConvertError. Оба исключения обрабатываются одинаково: выводится сообщение, после чего процедура обработки события Onclick завершает свою работу.



Содержание раздела