Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

1.6.7. Искусственная генерация исключений

Для отладки обработки исключений используется оператор:

Raise[<тип исключения>[.<имя конструктора>(<параметры>)]];

Если исключение не указано, то повторно генерируется ранее обработанное исключение по схеме:

Try<операторы внешнего блока>

Try<операторы внутреннего блока>

Except//исключения внутреннего блока

On<тип исключения>Do//начало обработки исключения

Begin<обработка исключения внутреннего блока>

Raise; //повторная генерация исключения

End; //окончание обработки исключения

End; //окончание обработки всех исключений внутреннего блока

<операторы внешнего блока>

Except//исключения внешнего блока и повторно сгенерированное

On<тип исключения>Do<обработка исключений обоих блоков>

End; //окончание обработки всех исключений внешнего блока

Примерпроверки вводимого значения для делителя:

If (Edit1.Text=’’) Then Raise EZeroDivide.Create(‘Пустое значение’);

Если в полеEdit1 будет пустое значение, то сгенерируется исклю­че­ниеEzeroDivideи появится окно с текстом ‘Пустое значение’.

1.6.8. ИсключенияEAbortи функцияAbort

Если исключение EAbortне обрабатывается, то оно выполняется без всякого сообщения (молчаливое прерывание). ФункцияAbortискус­ствен­но генерирует это исключение, которое прерывает работу текущей под­прог­раммы и все вызвавшие ее подпрограммы, возвращая управление на самый верх, т.е. происходит возврат из глубоко вложенных подпрограмм.

Пример: If B=0 Then Abort;

При необходимости это исключение можно обработать, указав в разделеExceptблокаTry...ExceptоператорOnEAbortDo... .

1.6.9. Создание нового типа исключения

Новый тип исключения создается в разделе типов модуля в виде:

Type<имя нового типа исключения>=Class(Exception) [<свойства>End];

Примерконтроля за присутствием информации в поле вводаEdit1:

TypeEPusto=Class(Exception); //создание собственного типа исключения

... If Edit1.text='' Then Raise EPusto.Create('Пустое поле');//генерация искл.

ElseA:=Edit1.text; //использование значения поля вводаEdit1.

Примерсоздания нового исключенияETErrorсо свойствомNError:

Type ETError=Class(Exception) Public NError : Integer; End;//создание искл.

VarEError:ETError;... //объявление переменной типаETError

Try...IfErr>0Then//условие наличия ошибки.Err‑ номер ошибки

BeginEError:=ETError.Create(‘Ошибка!’);//текст сообщения

EError.NError:=Err; //запоминание ошибки в свойстве

RaiseEError; //генерация исключения и переход вExcept

End;...

Except// раздел обработки исключений

OnETErrorDo//обработка созданного исключенияETError

CaseEError.NerrorOf//варианты обработки ошибки

1: ... //обработка ошибки под номером 1

2: .. . //обработка ошибки под номером 2

...

End//окончание вариантов обработки ошибок

End; //окончание раздела обработки исключений

Вопросы для самопроверки и контроля

Вопросы для самопроверки

  1. Каково назначение оператора Try?

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

  1. Каково назначение раздела Finally в операторе Try?

1.7. Основные стандартные функции и процедуры

Для сокращения описания процедур и функций используются имена: S,S1,S2 ‑ строковые параметры,F- файловые переменные иH‑ дескрип­то­­ры файлов,N‑ целочисленные переменные.

1.7.1. Математические функции

Abs(R: real): real ‑ возвращает абсолютное значение аргумента.

ArcTan(R: real): real ‑ возвращает арктангенс аргумента.

Cos/Sin(R: real): real ‑ возвращает косинус/синус аргумента.

Exp(R: real): real ‑ возвращает экспоненту аргумента.

Frac/Int(R: real): real ‑ возвращает дробную/целую часть аргумента.

Ln(R: rеal): rеal ‑ возвращает натуральный логарифм аргумента.

Pi: real ‑ возвращает значение числаPi=3.1415926535897932385.

Randomize‑ инициализирует генератор случайных чисел.

Random[(R: word)]‑ возвращает случайное число от 0 до R (1). Пред­вари­тель­но нужно выполнить функциюRandomize.

Round (R: real): longint‑ округляет значение R до ближайшего целого.

Sqr(R: real): real ‑ возвращает аргумент в квадрате.

Sqrt(R: real): real ‑ возвращает квадратный корень аргумента.

Odd(X): Boolean‑ проверяет, является ли аргумент нечетным числом.

Trunc(B: real): longint‑ усекает значение до целого путем отбрасывания дробной части.

1.7.2. Форматирование

1.7.2.1. Строка форматирования

Строка форматирования определяет порядок редактирования значе­ний аргументов при формировании форматированной строки.

Она содержит обычные символы, которые переносятся в формати­ро­ван­ную строку и спецификаторы (шаблоны) формата редактирования аргу­мен­тов, который имеет вид:

%[<индекс>:][‑][<ширина поля>[.<N‑точность>]<тип>]

[] ‑ выравнивание результата влево в поле вывода.

<индекс>‑ задает порядковый номер редактируемого аргумента (отсчет с нуля). Это позволяет пропускать отдельные аргументы или повторять редактирование.

<ширина поля>‑ задает минимальное число символов результата. При меньшей длине происходит добавление пробелов слева или справа.

<тип>- определяет формат редактирования аргумента:

d‑ десятичное целое длиной не менееNзнаков;

e‑ научный формат: [‑]d.dddE+dddили [‑]d.dddE‑ddd. (N=15);

f ‑ вещественное число вида [‑]ddd.ddd.... . (N=2);

g‑ обобщенный форматeилиfс наименьшим размером записи;

n‑ аналогиченf, но дополнительно выводятся разделители‑запятые тысяч;

m‑ формат записи денежных сумм;

p ‑ указатели в виде <номер сегмента>:<смещение>;

s ‑ формат строки для аргументов типа символ или строка.N– мак­си­маль­ное число вставляемых символов;

x‑ шестнадцатеричное целое длиной не менееNзнаков.