Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lopp.DOC
Скачиваний:
6
Добавлен:
31.03.2015
Размер:
187.39 Кб
Скачать
    1. Обработка определенных исключительных ситуаций

Причина возникновения исключительных ситуаций может быть самой различной. В больших и сложных программах было бы целесообразно более точно определить причину возникновения исключительной ситуации и сообщить об этом пользователю. При запуске приложения из Delphi это делается автоматически. Обратите внимание на текст сообщения на рис. 9.2.: “Exception class EConvertError with Message ‘ ‘rtrt’ is not a valid integer value’ “. Нам сообщают, что возник класс исключения EConvertError (ошибка преобразования) и это вызвало сообщение о том, что

Поставим задачу: обеспечить определение класса исключительной ситуации и при запуске приложения из операционной системы. Некоторые классы исключительных ситуаций Delphi приведены в табл. 9.1. Полный перечень можете узнать традиционным способом.

Класс ИС

Описание

EBreakPoint

В программе имеется точка прерывания

EConvertError

Ошибка преобразования (см. последний пример)

EDivByZero

Деление целого числа на нуль

EInOutError

Ошибка файлового ввода/вывода

EIntOverFlow

Переполнение целочисленного значения

EInvalidCast

Недопустимое приведение типов

EInvalidOp

Недопустимая математическая операция с плавающей точкой

EOutOfMemory

Невозможно выделить память требуемого объема

EOverflow

Переполнение значения с плавающей точкой

ERangeError

Значение за пределами диапазона допустимых значений

EUnderflow

Потеря значимости в выражении с плавающей точкой (слишком малое значение)

EZeroDivide

Деление числа с плавающей точкой на нуль

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

procedure TForm1.Button1Click(Sender: TObject);

Var

Res :real;

Rida :string;

begin

{Вызов процедуры, передача исходных данных, получение результата}

mina(Edit1.Text,Edit2.Text,Edit4.Text,res);

{Вывод результата}

rida:=FloatToStr(res);

Edit3.Text:=rida;

end;

unit mod2;

interface

procedure mina(s1,s2,s3:string; var r:real);

implementation

{Для обеспечения вызова стандартных процедур и функций}

uses SysUtils, Dialogs;

procedure mina(s1,s2,s3:string; var r:real);

Var

i,j,k :shortint;

p,q :real;

begin

{Начинается защищенная часть,}

{при выполнении возможны исключительные ситуации}

try

i:=StrToInt(s1);

j:=StrToInt(s2);

p:=StrToFloat(s3);

k:=i*j*100;

r:=sqrt(i*j);

q:=p/i;

except {Обработка исключительных ситуаций}

on EInvalidOp do ShowMessage ('Недопустимая операция');

on ERangeError do

ShowMessage ('Значение за пределами допустимых границ');

on EConvertError do ShowMessage(’Исходные данные не возможно преобразовать в числа');

on EZeroDivide do begin

ShowMessage('Деление на нуль');

q:=0;

end;

else ShowMessage ('Не удалось определить причину преры- вания');

end;

end;

end.

В приведенном примере показано программирование реакций на различные исключительные ситуации. В большинстве случаев мы ограничились выводом сообщения о ней, но в принципе возможно и преодоление ее последствий, например, присвоением значения по умолчанию (q:=0;).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]