- •Структуры данных и алгоритмы их обработки (Учебное пособие)
 - •Москва 2007
 - •1. Структуры данных и алгоритмы 6
 - •1.2. Информация и ее представление
 - •1.2.1. Природа информации
 - •1.2.2. Хранение информации
 - •1.2.3. Классификация структур данных
 - •1.3. Операции над структурами данных
 - •1.4. Порядок алгоритма
 - •1.5. Структурность данных и технологии программирования
 - •Контрольные вопросы
 - •2. Простые структуры данных
 - •2.1. Порядковые типы
 - •2.2. Целочисленный тип
 - •2.3. Символьный тип
 - •2.4. Перечисляемый тип
 - •2.5. Интервальный тип
 - •2.6. Логический тип
 - •2.7. Битовый тип
 - •2.8. Вещественный тип
 - •2.9. Указательный тип
 - •Контрольные вопросы
 - •3. Объектные типы данных
 - •3.1. Объявление и реализация классов
 - •Interface
 - •Implementation
 - •3.2. Директивы видимости
 - •3.3. Свойства классов
 - •3.4. Структурированная обработка ошибок
 - •3.5. Применение объектов
 - •Контрольные вопросы
 - •4. Статические структуры данных
 - •4.1. Векторы
 - •4.2. Массивы
 - •4.3. Множества
 - •4.4. Записи
 - •4.5. Таблицы
 - •4.6. Операции над статическими структурами
 - •4.6.1. Алгоритмы поиска
 - •4.6.2. Алгоритмы сортировки
 - •Самые медленные алгоритмы сортировки
 - •Быстрые алгоритмы сортировки
 - •Самые быстрые алгоритмы сортировки
 - •Сортировка слиянием
 - •Контрольные вопросы
 - •5. Полустатические структуры данных
 - •5.1. Стеки
 - •5.1.1. Стеки в вычислительных системах
 - •5.2. Очереди fifo
 - •5.2.1. Очереди с приоритетами
 - •5.2.2. Очереди в вычислительных системах
 - •5.3. Деки
 - •5.3.1. Деки в вычислительных системах
 - •5.4. Строки
 - •5.4.1. Операции над строками
 - •5.4.2. Представление строк в памяти
 - •3 A b d 8 p q r s t u V w
 - •V w ptr nil
 - •1 8 П р е д с т а в
 - •2 7 ? Л е н и е ?
 - •1 8 С т р о к и з
 - •1 8 В е н ь я м и
 - •1 8 С у п р а в л
 - •1 8 Я е м о й д л
 - •1 4 И н о й ? ? ? ? nil
 - •6.2. Связные линейные списки
 - •6.2.1. Машинное представление связных линейных списков
 - •Inf next
 - •Inf next
 - •Inf nil
 - •6.2.2. Реализация операций над связными линейными списками
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •Inf next
 - •6.2.3. Применение линейных списков
 - •6.3. Нелинейные разветвленные списки
 - •6.3.1. Основные понятия
 - •6.3.2. Представление списковых структур в памяти
 - •6.3.3. Операции обработки списков
 - •6.4. Язык программирования lisp
 - •6.5. Управление динамически выделяемой памятью
 - •Контрольные вопросы
 - •7. Нелинейные структуры данных
 - •7.1. Графы и деревья
 - •(B) (a) (b) (a)
 - •V0 v1 v2 v5 v6 v3 v4 v7 v8 v9 v10 (v0) (v1) (v7) (v8) (v9) (v10) (v3) (v2) (v4) (v5) (v6)
 - •7.3. Бинарные деревья
 - •7.3.1. Представление бинарных деревьев
 - •7.3.2. Прохождение бинарных деревьев
 - •7.4. Алгоритмы на деревьях
 - •7.4.1. Сортировка с прохождением бинарного дерева
 - •7.4.2. Сортировка методом турнира с выбыванием
 - •7.4.3. Применение бинарных деревьев для сжатия информации
 - •7.4.4. Представление выражений с помощью деревьев
 - •7.5. Представление сильноветвящихся деревьев
 - •Контрольные вопросы
 - •8. Методы ускорения доступа к данным
 - •8.1. Хеширование данных
 - •8.1.1. Функции хеширования
 - •8.1.2. Оценка качества хеш-функции
 - •8.1.3. Методы разрешения коллизий
 - •8.1.4. Переполнение таблицы и рехеширование
 - •8.2. Организация данных для поиска по вторичным ключам
 - •8.2.1. Инвертированные индексы
 - •8.2.2. Битовые карты
 - •Контрольные вопросы
 - •Листинги рабочих примеров
 - •1. Создание и управление списковыми объектами
 - •Interface
 - •Implementation
 - •Interface
 - •Implementation
 - •3. Моделирование работы стека
 - •Interface
 - •Implementation
 - •Interface
 - •Implementation
 - •4. Создание и редактирование бинарных деревьев
 - •5. Создание и редактирование сильноветвящихся деревьев
 - •Задания для самостоятельной работы
 - •Литература
 - •144Кафедра Вычислительной Техники и Программирования Московского Государственного Открытого Университета
 
3.4. Структурированная обработка ошибок
В объектной модели языка Паскаль введено понятие исключений – ошибок времени выполнения, которые могут возникать как при некорректных действиях пользователя, так и в случае неудачного выполнения различных действий (файловых операций, запроса ресурсов операционной системы и т.д.). Средства обработки исключений позволяют упростить задачу корректного выхода из подпрограмм, их вызвавших.
Базовым классом для всех исключений является TException. Объект исключения содержит информацию о типе исключения, например, деление на ноль (класс EZeroDivide), недостаточность системных ресурсов (класс EOutOfMemory), ошибка ввода-вывода (класс EInOutError). Разветвленная структура исключений позволяет фиксировать только интересующие типы. Например, ошибки переполнения или деления на ноль относятся к классу EMathError. Поэтому, чтобы не обрабатывать все особые ситуации чисел с плавающей точкой, можно локализовать только интересующие типы, входящие в данную подгруппу.
Существуют два типа защищенных блоков, которые позволяют изменить распространение исключений. К ним относятся конструкции вида try…except…end и try…finally…end. Структурному блоку except…end передается управление только в случае появления исключения, когда требуется немедленно отреагировать на возникшую внештатную ситуацию:
try
{ охраняемый блок операторов }
except
{ Блок реакции с обработчиками особой ситуации }
end;
Внутри блока except создаются обработчики особых ситуаций для классов исключений. Обработчик имеет следующий формат:
on<класс особой ситуации>do
begin
{ код обработки особой ситуации }
end;
Объект исключения содержит текстовое описание исключения в свойстве Message и адрес исключения, доступный по методу ExceptAddr.
Содержимое finally…end выполняется в любом случае для гарантированного освобождения выделенных ресурсов:
try
{ охраняемый блок операторов }
finally
{ Блок реакции с кодом завершения }
end;
Исключения реализуются через стек вызова (список вложенных подпрограмм), и имеют ассоциированную с ним область действия. Необработанные локально (в рамках процедуры-источника), исключения передается вверх по стеку вызова к следующему блоку, который сможет его обработать. Если исключение не обрабатывается пользователем, оно передается в глобальный обработчик исключений.
Поскольку исключение по возможности следует анализировать на максимально низком уровне, то оно в основном осуществляется в блоке try…except…end. Использовать эту конструкцию следует в случае, когда при возникновении исключения требуется выполнение неотложных действий.
Обработчики исключений схожи с виртуальными методами, т.к. их можно использовать для переопределения или дополнения обработки. Если требуется активизировать стандартную обработку исключения после выполнения обработке в блоке except, можно повторно сгенерировать данное исключение с помощью директивы Raise.
Общий синтаксис повторного возбуждения исключения таков:
try
{ Охраняемые операторы }
except
on ESomeException do
begin
{ Локальная обработка особой ситуации }
raise; { повторное возбуждение исключения }
end;
end;
Схему структурированной обработки исключений можно представить в следующем виде:
try
{ получение дескриптора запрашиваемого ресурса }
try
{ выполнение потенциально опасных операций }
...
finally
{ Блок реакции с кодом завершения; освобождение ресурса }
end;
{ Блок реакции с обработчиками особой ситуации }
except
{ выделение требуемых классов исключений }
on< класс особой ситуации 1 >do
on< класс особой ситуации 2 >do
...
on< класс особой ситуации N >do
...
{ если требуется, повторное возбуждение исключительной ситуации }
raise;
end;
