Обработка исключительных ситуаций в delphi реферат

Обновлено: 05.07.2024

Обработка исключительных ситуаций - это система, позволяющая программисту при возникновении ошибки (исключительной ситуации) связаться с кодом программы, подготовленным для обработки такой ошибки. Это выполняется с помощью языковых конструкций, которые содержат в себе фрагмент кода программы и определяют обработчики ошибок, которые будут вызываться, если произойдёт ошибка в этом фрагменте кода. В данном случае понятие исключительной ситуации относится к языку и не нужно его путать с системными исключительными ситуациями, такими как General Protection Fault. Эти исключительные ситуации обычно используют прерывания, и особые состояния аппаратной части компьютера для обработки критичной системной ошибки; исключительные ситуации в Delphi же независимы от аппаратной части компьютера, не используют прерываний и используются для обработки ошибочных состояний, с которыми подпрограмма не готова иметь дело. Системные исключительные ситуации, конечно, могут быть перехвачены и преобразованы в языковые исключительные ситуации, но это только одно из применений языковых исключительных ситуаций.

Такой способ обработки ошибок трудоемок, требует написания большого количества кода, в котором можно легко ошибиться и который трудно отлаживать.

Обработка исключительной ситуации замещает ручную обработку ошибок автоматической, сгенерированной компилятором системой уведомления. В приведенном выше примере, процедура A установила бы обработчик ошибки на фрагмент кода, в котором вызывается B. B просто вызывает C. Когда C обнаруживает ошибку, то создает (raise) исключительную ситуацию. Специальный код, сгенерированный компилятором и встроенный в Run-Time Library (RTL) начинает поиск обработчика данной исключительной ситуации. При поиске участка кода связанного с обработчиком используется информация, сохраненная в стеке. В процедурах C и B нет такого участка, а в A - есть. Если один из обработчиков ошибок, которые используются в A, подходит по типу для возникшей в C исключительной ситуации, то программа переходит на его выполнение. При этом область стека, используемая в B и C, очищается; выполнение этих процедур прекращается.

Без проверки возвращаемого кода после каждого вызова подпрограммы, код программы должен быть более простым, а скомпилированный код - более быстрым. При наличии исключительных ситуаций подпрограмма B не должна содержать дополнительный код для проверки возвращаемого результата и передачи его в A. B ничего не должна делать для передачи исключительной ситуации, возникшей в C, в процедуру A - встроенная система обработки исключительных ситуаций делает всю работу.

Программирование на языке Delphi

Глава 4. Исключительные ситуации и надежное программирование

Авторы: А.Н. Вальвачев
К.А. Сурков
Д.А. Сурков
Ю.М. Четырько

Когда программист после компиляции получает готовый к исполнению файл, он искренне верит, что программа будет работать именно так, как он хочет. Пока она в его заботливых руках, так оно обычно и бывает. Когда же программа попадает в более суровые условия — к новому пользователю и на другой компьютер — с ней может произойти все, что угодно. “Новый хозяин“ может вместо ожидаемых цифр ввести буквы, извлечь корень из отрицательного числа, делить на ноль и выполнять множество других необдуманных, часто случайных действий. Особенно это касается интерактивных (диалоговых) приложений, а таких — громадное большинство. Из этого следует, что программист должен организовать мощную оборону от всех посягательств на жизнедеятельность своей программы в процессе ее выполнения. О том, как это сделать, рассказывается в этой главе.

4.1. Ошибки и исключительные ситуации

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

Хорошая программа должна справляться со своими ошибками и работать дальше, не зацикливаясь и не зависая ни при каких обстоятельствах. Для обработки ошибок можно, конечно, пытаться использовать структуры вида if then Exit. Однако в этом случае ваш стройный и красивый алгоритм решения основной задачи обрастет уродливыми проверками так, что через неделю вы сами в нем не разберетесь. Из этой почти тупиковой ситуации среда Delphi предлагает простой и элегантный выход — механизм обработки исключительных ситуаций.

Исключительная ситуация (exception) — это прерывание нормального хода работы программы из-за невозможности правильно выполнить последующие действия.

Представим, что подпрограмма выделяет область динамической памяти и загружает в нее содержимое некоторого файла. Если в системе окажется недостаточно памяти, то данные будет негде разместить и попытка загрузить файл приведет к ошибке. Скорее всего, вся программа будет аварийно завершена из-за того, что оператор загрузки данных обратится по недоступному для программы адресу. Как этого избежать? При обнаружении проблемы подпрограмма должна создать исключительную ситуацию — прервать нормальный ход своей работы и передать управление тем операторам, которые смогут обработать ошибку. Как правило, операторы обработки исключительных ситуаций находятся в одной из вызывающих подпрограмм.

Механизм обработки исключительных ситуаций лучше всего подходит для взаимодействия программы с библиотекой подпрограмм. Подпрограммы библиотеки обнаруживают ошибки, но в большинстве случаев не знают, как на них реагировать. Вызывающая программа, наоборот, знает, что делать при возникновении ошибок, но, как правило, не умеет их своевременно обнаруживать. Благодаря механизму обработки исключительных ситуаций обеспечивается связь между библиотекой и использующей ее программой при обработке ошибок.

Механизм обработки исключительных ситуаций довольно сложен в своей реализации, но для программиста он прост и прозрачен. Для его использования в язык Delphi введены специальные конструкции try . except . end , try . finally . end и оператор raise , рассмотренные в этой главе.

4.2. Классы исключительных ситуаций

Исключительные ситуации в языке Delphi описываются классами. Каждый класс соответствует определенному типу исключительных ситуаций. Когда в программе возникает исключительная ситуация, создается объект соответствующего класса, который переносит информацию об этой ситуации из места возникновения в место обработки.

Классы исключительных ситуаций образуют иерархию, корнем которой является класс Exception . Класс Exception описывает самый общий тип исключительных ситуаций, а его наследники — конкретные виды таких ситуаций (таблица 4.1). Например, класс EOutOfMemory порожден от Exception и описывает ситуацию, когда свободная оперативная память исчерпана.

В следующей таблице приведены стандартные классы исключительных ситуаций, объявленные в модуле SysUtils. Они покрывают практически весь спектр возможных ошибок. Если их все-таки окажется недостаточно, вы можете объявить новые классы исключительных ситуаций, порожденные от класса Exception или его наследников.

Наследование классов позволяет создавать семейства родственных исключительных ситуаций. Примером такого семейства являются классы исключительных ситуаций вещественной математики, которые объявлены в модуле SysUtils следующим образом.

Класс исключительных ситуаций EMathError является базовым для классов EInvalidOp, EZeroDivide, EOverflow и EUnderflow, поэтому, обрабатывая исключительные ситуации класса EMathError, вы будете обрабатывать все ошибки вещественной математики, включая EInvalidOp, EZeroDivide, EOverflow и EUnderflow.

Нетрудно заметить, что имена классов исключений начинаются с буквы E (от слова Exception). Этого правила полезно придерживаться при объявлении собственных классов исключений, например:

Как описываются классы исключительных ситуаций понятно, рассмотрим теперь, как такие ситуации обрабатываются.

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

4.3.1. Создание исключительной ситуации

Идея обработки исключительных ситуаций состоит в следующем. Когда подпрограмма сталкивается с невозможностью выполнения последующих действий, она создает объект с описанием ошибки и прерывает нормальный ход своей работы с помощью оператора raise . Так возникает исключительная ситуация.

Данный оператор создает объект класса EOutOfMemory (класс ошибок исчерпания памяти) и прерывает нормальное выполнение программы. Вызывающие подпрограммы могут эту исключительную ситуацию перехватить и обработать. Для этого в них организуется так называемый защищенный блок :

Между словами try и except помещаются защищаемые от ошибок операторы. Если при выполнении любого из этих операторов возникает исключительная ситуация, то управление передается операторам между словами except и end , образующим блок обработки исключительных ситуаций. При нормальном (безошибочном) выполнении программы блок except . end пропускается (рисунок 4.1).



Рисунок 4.1. Логика работы оператора try…except…end

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

Исключительные ситуации внешнего защищенного блока, возникающие за пределами вложенного блока, обрабатываются внешней секцией except . end . Исключительные ситуации вложенного защищенного блока обрабатываются вложенной секцией except . end .

4.3.2. Распознавание класса исключительной ситуации

Распознавание класса исключительной ситуации выполняется с помощью конструкций

которые записываются в секции обработки исключительной ситуации, например:

Поиск соответствующего обработчика выполняется последовательно до тех пор, пока класс исключительной ситуации не окажется совместимым с классом, указанным в операторе on . Как только обработчик найден, выпоняется оператор, стоящий за словом do и управление передается за секцию except . end . Если исключительная ситуация не относится ни к одному из указанных классов, то управление передается во внешний блок try . except . end и обработчик ищется в нем.

Обратите внимание, что порядок операторов on имеет значение, поскольку распознавание исключительных ситуаций должно происходить от частных классов к общим классам, иначе говоря, от потомков к предкам. С чем это связано? Сейчас поймете. Представьте, к чему приведет изменение порядка операторов on в примере выше, если принять во внимание, что класс EMathError является базовым для EZeroDivide . Ответ простой: обработчик EMathError будет поглощать все ошибки вещественной математики, в том числе EZeroDivide , в результате обработчик EZeroDivide никогда не выполнится.

На самом высоком уровне программы бывает необходимо перехватывать все исключительные ситуации, чтобы в случае какой-нибудь неучтенной ошибки корректно завершить приложение. Для этого применяется так называемый обработчик по умолчанию (default exception handler). Он записывается в секции except после всех операторов on и начинается ключевым словом else :

Учтите, что отсутствие части else соответствует записи else raise , которое нет смысла использовать явно. Мы со своей стороны вообще не советуем вам пользоваться обработкой исключительных ситуаций по умолчанию, поскольку все ваши приложения будут строиться, как правило, на основе библиотеки VCL, в которой обработка по умолчанию уже предусмотрена.

4.3.3. Пример обработки исключительной ситуации

В качестве примера обработки исключительной ситуации рассмотрим две функции: StringToCardinal и StringToCardinalDef.

Функция StringToCardinal выполняет преобразование строки в число с типом Cardinal. Если преобразование невозможно, функция создает исключительную ситуацию класса EConvertError.

Функция StringToCardinalDef также выполняет преобразование строки в число с типом Cardinal, но в отличие от функции StringToCardinal она не создает исключительную ситуацию. Вместо этого она позволяет задать значение, которое возвращается в случае неудачной попытки преобразования:

Пример очень прост, но хорошо демонстрирует преимущества исключительных ситуаций перед традиционной обработкой ошибок. Представьте более сложные вычисления, состоящие из множества операторов, в каждом из которых может произойти ошибка. Насколько сложной окажется обработка ошибок многочисленными операторами if и насколько простой оператором try .

4.3.4. Возобновление исключительной ситуации

В тех случаях, когда защищенный блок не может обработать исключительную ситуацию полностью, он выполняет только свою часть работы и возобновляет исключительную ситуацию с тем, чтобы ее обработку продолжил внешний защищенный блок:

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

4.3.5. Доступ к объекту, описывающему исключительную ситуацию

При обработке исключительной ситуации может потребоваться доступ к объекту, описывающему эту ситуацию и содержащему код ошибки, текстовое описание ошибки и т.д. В этом случае используется расширенная запись оператора on :

Обратите внимание, что после обработки исключительной ситуации освобождение соответствующего объекта выполняется автоматически, вам этого делать не надо.

4.4. Защита выделенных ресурсов от пропадания

4.4.1. Утечка ресурсов и защита от нее

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

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

Особенность этого блока состоит в том, что секция finally . end выполняется всегда независимо от того, происходит исключительная ситуация или нет. Если какой-либо оператор секции try . finally генерирует исключительную ситуацию, то сначала выполняется секция finally . end , называемая секцией завершения (освобождения ресурсов), а затем управление передается внешнему защищенному блоку. Если все защищаемые операторы выполняются без ошибок, то секция завершения тоже работает, но управление передается следующему за ней оператору. Обратите внимание, что секция finally . end не обрабатывает исключительную ситуацию, в ней нет ни средств ее обнаружения, ни средств доступа к объекту исключительной ситуации.



Рисунок 4.2. Логика работы оператора try…except…end

Блок try . finally . end обладает еще одной важной особенностью. Если он помещен в цикл, то вызов из защищенного блока процедуры Break с целью преждевременного выхода из цикла или процедуры Continue с целью перехода на следующую итерацию цикла сначала обеспечивает выполнение секции finally . end , а затем уже выполняется соответствующий переход. Это утверждение справедливо также и для процедуры Exit (выход из подпрограммы).

Как показывает практика, подпрограммы часто распределяют сразу несколько ресурсов и используют их вместе. В таких случаях применяются вложенные блоки try . finally . end :

Кроме того, вы успешно можете комбинировать блоки try . finally . end и try . except . end для защиты ресурсов и обработки исключительных ситуаций.

4.5. Итоги

В этой главе вы узнали многое об исключительных ситуациях и способах борьбы с ними. Теперь ваши программы наверняка дадут достойный отпор не только самому неотесанному пользователю, но и его деревянному компьютеру. Это, кстати говоря, одно из необходимых качеств, которые позволят отнести вашу программу к классу хороших. Позволим себе также напомнить, что здесь были рассмотрены только ошибки времени выполнения, поэтому не забудьте прочитать гл.10, где рассказано о борьбе с логическими ошибками.

Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.

Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
РЫБИНСКИЙ ГОСУДАРСТВЕННЫЙ АВИАЦИОННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ имени П. А. СОЛОВЬЕВА


Факультет Социально-экономический
Кафедра МПО ЭВС


Реферат
по дисциплине
Информатика
на тему:
Обработка исключительных ситуаций

Студент группы ……… ………………………Карпов А.В.
(Код) (Подпись, дата) (Фамилия И. О.)

Преподаватель…………………… …………………….Абрамова С.В.
(Код) (Подпись, дата) (Фамилия И. О.)

Исключительная ситуация 3
Пример 4
Часто используемые классы исключений. 6Исключительная ситуация

В Delphi предусмотренглобальный обработчик исключительных ситуаций и могут быть задействованы локальные обработчики. Глобальная обработка исключений реализуется через объект Application. Глобальная обработка обеспечивает пользователя информацией об ошибке, но не устраняет причины.

Для обозначения начала защищенного участка кода используется служебное слово try, завершается конструкция словом end. Существует два типа защищенных участков:try. except и try. finally, которые имеют похожий синтаксис, но отличаются по назначению. Первый тип используется для обработки исключительных ситуаций. Его синтаксис:


Конструкция try. except применяется для перехвата исключительной ситуации ипозволяет восстановить работоспособность программы. Секция except может быть разбита на несколько частей on. do для обработки разных классов исключений. После конструкций on. do может быть помещён раздел else, который относится ко всему блоку. По логике работы группа конструкций on. do напоминает оператор case. К исключениям, не имеющим своих локальных обработчиков, применяется механизмглобальной обработки через объект Application.

Рассмотрим следующий пример. В поля Edit1 и Edit2 записываются целые числа. При щелчке по кнопке Button1 выполняетсяперевод введённых строк в числовой формат, первое число делится на второе и результат выводится в Edit3. Затем в Memo1 записываются исходные строки, сумма чисел и частное от деления первого числа на второе.

procedure TForm1.Button1Click(Sender: TObject);
var a,b:integer;
rez:extended;
begin
a:=strtoint(Edit1.Text);
b:=strtoint(Edit2.Text);
rez:=a/b;
Edit3.Text:=floattostr(rez);.

Всякое взаимодействие с операционной системой на предмет получения ресурсов — места на диске, в памяти, открытие файла — может завершиться неудачно. Любое вычисление может закончиться делением на ноль или переполнением. При возникновении исключительных ситуаций (ИС) программа генерирует исключение и выполнение дальнейших действий в данном блоке прекращается. Платой за надежную работу программы в таких условиях служит введение многочисленных проверок, способных предотвратить некорректные действия в случае возникновения нештатной ситуации.

При разработке приложений в Delphi есть возможность использовать несколько механизмов, обеспечивающих обработку исключительных ситуаций. Это и классы, предназначенные для программирования реакции на ошибки, и специальные операторы языка Object Pascal.

В Delphi есть иерархия классов во главе с базовым классом Exception, которые предназначены для обработки исключительных ситуаций. В таблицах 1 и 2 приведены некоторые такие классы.

Таблица 1.ИС целочисленной математики (порождены отEIntError)

Тип Условие возникновения
EDivByZero Попытка деления на ноль (целое число)
ERangeError Число или выражение выходит за допустимый диапазон
EIntOverflow Целочисленное переполнение

Таблица 2.ИС математики с плавающей точкой (порождены от EMathError)

Тип Условие возникновения
EInvalidOp Неверная операция
EZeroDivide Попытка деления на ноль
EOverflow Переполнение с плавающей точкой
EUnderflow Исчезновение порядка
EInvalidArgument Неверный аргумент математических функций

Защитные конструкции языка Object Pascal

Для работы с объектами исключительных ситуаций существуют специальные конструкции языка Object Pascal— блоки try…except и try…finally. Они контролируют выполнение операторов, помещенных внутри блока до ключевого слова except или finally. В случае возникновения исключительной ситуации штатное выполнение вашей программы немедленно прекращается, и управление передается операторам, идущим за указанными ключевыми словами. Если в вашей процедуре эти блоки отсутствуют, управление все равно будет передано ближайшему блоку, внутри которого возникла ситуация.

Блок try..except

Для реакции на конкретный тип ситуации применяется блок try..except. Синтаксис его следующий:

on EExceptionl do ;

on EException2 do ;

else //обработчик прочих ИС

Выполнение блока начинается с секции try. При отсутствии исключительных ситуаций только она и выполняется. Секция except получает управление в случае возникновения ИС. После обработки происходит выход из защищенного блока, и управление обратно в секцию try не передается; выполняются операторы, стоящие после end.

Если вы хотите обработать любую ИС одинаково, независимо от ее класса, вы можете писать код прямо между операторами except и end. Но если обработка отличается, здесь можно применять набор директив on. do, определяющих реакцию приложения на определенную ситуацию. Каждая директива связывает ситуацию (on. ), заданную своим именем класса, с группой операторов (do. ).

Иногда замена if. then на try. except не приводит к экономии кода. Однако если при решении вычислительной задачи проверять на возможное появление ИС приходится не один, а множество раз, то выигрыш неоспорим — достаточно одного блока try. except на все вычисления.

При возникновении ИС директивы просматриваются последовательно, в порядке их описания. Каждый тип исключительной ситуации, описанный после ключевого слова on, обрабатывается именно этим блоком: только то, что предусмотрено в нем, и будет являться реакцией на данную ситуацию.

Если возникла ситуация, не определенная ни в одной из директив, выполняются те операторы, которые стоят после else. Если и их нет, то ИС считается не обработанной и будет передана на следующий уровень обработки. Этим следующим уровнем может быть другой оператор try. except, который содержит в себе данный блок.

Блок try. finally

Параллельно с блоком try. except в языке существует и try. finally. Он соответствует случаю, когда необходимо возвратить выделенные программе ресурсы даже в случае аварийной ситуации. Синтаксис блока try. finally таков:

Следующие за try операторы исполняются в обычном порядке. Если за это время не возникло никаких ИС, далее следуют те операторы, которые стоят после finally. В случае если между try и finally произошла ИС, управление немедленно передается операторам части finally…end. Таким образом, операторы, стоящие после finally, выполняются всегда. Блок try. finally еще называется блоком защиты ресурсов. Данная конструкция ничего не делает с самим объектом — исключительной ситуацией. Задача try. finally — только прореагировать на факт нештатного поведения программы и проделать определенные действия. Сама же ИС остается необработанной.

Блоки защиты ресурсов и обработчики ИС, как и другие блоки, могут быть вложенными:

Вызов исключения

В некоторых случаях бывает необходимо инициировать собственное исключение. Для этого используется зарезервированное слово raise (возбудить). Если это слово встретилось в секции try.. .except или try.. .finally, немедленно начинают свою работу секции except. end и finally. end соответственно.

Слово raise возбуждает исключение самого общего класса Exception. Если программист желает возбудить исключение конкретного типа (не важно - стандартного или собственного), он должен явно указать класс создаваемого в этот момент объекта путем вызова его конструктора. Например, следующий оператор возбудит ошибку ввода/вывода:

Такой прем - единственная возможность возбудить нестандартное исключение.

1. MessageDlg(const Msg: string; AType: TMsgDlgType;AButtons: TMsgDlgType;

2. MessageDlgPos(const Msg: string; AType: TMsgDlgType; Buttons: TMsgDlgType;

HelpCtx: Longint; X,Y: integer):Word;

3. ShowMessage(const Msg: string);

Пример создания приложения с обработкой ИС.

Задание. Создать Windows-приложение для отображения матрицы. Матрица должна загружаться из файла, выбранного с помощью компонента OpenDialog.

Для выполнения этого задания на форме необходимо разместить следующие компоненты:

Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.1.

При работе с массивами ввод и вывод информации на экран удобно организовывать с помощью компонента StringGrid. Компонент StringGrid используется для отображения информации в виде таблицы. Пиктограмма компонента StringGrid находится на странице Additional Палитры Компонентов. Таблица содержит две зоны – фиксированную и рабочую. Фиксированная зона служит для вывода наименований строк и столбцов рабочей зоны и управления их размерами с помощью “мыши”. Фиксированная зона выделена другим цветом и в нее запрещен ввод информации с клавиатуры.

Количество строк и столбцов фиксированной зоны устанавливается в свойствах FixedRows и FixedCols соответственно. Рабочая зона содержит RowCountстрок и ColCountстолбцов информации, которую можно изменять как программно, так и с помощью “мыши” или клавиатуры. Доступ к содержимому ячеек в программе осуществляется с помощью свойства Cells[ACol, ARow: integer]: string, где ACol-номер столбца, а ARow – номер строки таблицы, причем нумерация начинается с нуля. По умолчанию в компонент StringGrid запрещен ввод информации с клавиатуры, для разрешения ввода информации в ячейки необходимо в Инспекторе Объектов дважды щелкнуть “мышью” на символе + свойства +Options и в открывшемся списке опций установить значение goEditing в True.

Так как в нашем задании фиксированная зона не используется, то в Инспекторе Объектов значения свойств FixedCols и FixedRowsможно установить равными 0. Организуем файл таким образом, чтобы в первой строке находилось количество строк матрицы, во второй – количество столбцов, а каждый элемент матрицы - в отдельной строке. Тогда, прочитав первые 2 цифры, можно установить значения свойств RowCount и ColCount компонента StringGrid. Так как при работе с файлами могут возникать ошибки ввода-вывода, то необходимо использовать защитные конструкции try..except и try..finally. В общем случае метод-обработчик события onClickдля компонента Button будет выглядеть следующим образом:

procedure TForm1.LoadClick(Sender: TObject);

if opendialog1.Execute then

if FileExists(OpenDialog1.FileName) then

reset(f1); // здесь возможна ошибка EInOutError

readln(f1,c); // здесь возможна ошибка EInOutError

readln(f1,r); // здесь возможна ошибка EInOutError

for i:=0 to r-1 do

for j:=0 to c-1 do

readln(f1,k); // здесь возможна ошибка EInOutError

stringgrid1.Cells[j,i]:=inttostr(k);// здесь возможна ошибка

on E:EInOutError do showmessage('Ошибка при работе с файлом: '+inttostr(E.Errorcode));

on EConvertError do showmessage('Ошибка преобразования типов');

else showmessage('Файл не найден');

Содержание отчета.

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

Контрольные вопросы.

1. Обработка исключительных ситуаций в Delphi: блок try …except.

2. Обработка исключительных ситуаций в Delphi: блок try .. finally.

3. Обработка исключительных ситуаций в Delphi: вызов исключений (raise).

4. Компоненты StringGrid, SpinEdit: назначение, основные свойства.

Читайте также: