Пример 11.2.
Создать программу обработки исключений, использующую инструкцию try…finally. Проект – консольное приложение.
Листинг программы
program Prg_11_2;
{$mode objfpc}{$H+}uses
uses
Classes, SysUtils, RusTrans;
const
h1=pi/6; // шаг для f1
h2=40; // шаг для f2
var
f:boolean=false; // флаг ошибки
i,Imin,Imax,i_error,dy:integer;
s:string;
y:array[-10..10] of real;
b:array[-10..10] of byte;
begin
writeln(Rus(‘Введите Imin и Imax в пределах -10…10′));
write(‘ Imin=’);
readln(imin);
write(‘ Imax=’);
readln(imax);
try // Секция Try
for i:=Imin to Imax do // Начало оператора 1
begin
i_error:=i; // i, если ошибка
if sin(i*h1)=0
then
begin
f:=true; // Установить флаг ошибки
writeln(Rus(‘Деление на 0′)); // Об ошибке
writeln(Rus(‘при i=’),i_error);
end
else f:=false;
y[i]:=1/sin(i*h1);
end;
for i:=Imin to Imax do // начало оператора 2
begin
i_error:=i; // i, если ошибка
dy:=i*h2;
if (dy<-30) or (dy>225)
then
begin
f:=true; //Установить флаг ошибки
writeln(Rus(‘Ошибка диапазона’)); // Об ошибке
writeln(Rus(‘при i=’),i_error);
end
else f:=false;
b[i]:=30+i*h2;
end;
finally // Секция Finally
if not f then writeln(‘OK’); // OK, если ошибок нет
readln; // Пауза
end; // Конец Try…Finally
end.
Консоль задания 2 в целом совпадает с консолью задания 1.
Выводы
- При исполнении программ возможны исключения (ситуации с ошибками). Примеры исключений – деление на ноль EZeroDivide, выход значений за пределы допустимого диапазона ERangeError.
- Для обработки исключений используются обработчики исключений (глобальные и локальные). Глобальные обработчики определены в ИСР и вызываются автоматически, если отладчик подключен. Локальные обработчики создает пользователь.
- Для локальной обработки исключений определена инструкция try…except…end. В секции try размещаются операторы, в которых могут возникнуть исключения, а в секции except обработчики исключений. При обнаружении исключения исполнение операторов секции try прекращается, управление передается нужному обработчику в секции except.
- Обработчик исключения имеет формат on <исключение> do <оператор> end.
- Для обнаружения исключений определена инструкция try…finally. В секции try размещаются операторы, в которых могут возникнуть исключения, а в секции finally операторы, исполняемые всегда. При возникновении исключения исполнение операторов секции try прекращается, управление передается первому оператору секции finally. После исполнения секции finally в случае ошибки появиться сообщение системного обработчика исключений.