Пример 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 в случае ошибки появиться сообщение системного обработчика исключений.
Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong



Copyright © 2009-2010 Программирование на паскале.