Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры к экзамену по программированию в 1 семест....doc
Скачиваний:
26
Добавлен:
22.04.2019
Размер:
576 Кб
Скачать

66. Исключительные ситуации. Системные и пользовательские исключения. Оператор try …catch. Виды блоков catch. Выброс исключений. И их обработка. Оператор throw.

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

try {операторы_защищенного_блока} catch(...) {обработчик_ошибочной_ситуации}

Многоточие является частью синтаксиса языка! Работа инструкции try … catch выполняется следующим образом. Выполняются инструкции, входящие в состав блока try (защищенный блок). Если при их выполнении исключение не возбуждается (в C++ чаще используется термин «выброс исключения»), то блок catch пропускается. При выбросе исключения выполнение защищенного блока прекращается, и начинают работать инструкции, записанные в блоке catch. Основной смысл этих инструкций – корректная обработка исключительной ситуации. Кроме того, в блок catch имеет смысл поместить код, который освобождает ресурсы, захваченные выполнившимися инструкциями из блока try. После окончания работы блока catch исключение считается обработанным, и управление передается на первую инструкцию, следующую за конструкцией try catch. Инициализация исключений и их обработка

Гораздо более интересным является механизм создания собственных исключений. Для их возбуждения используется оператор throw выражение

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

Соответственно, полный формат защищенного блока имеет вид

try {операторы_защищенного_блока} {catch-блоки}

67. Структура данных очередь. Линейная очередь. Реализация очереди с использованием массива. Это структура данных, представляющая собой совокупность однотипных элементов, над которой определены две основных операции:

  • Вставка в очередь;Извлечение из очереди. При этом извлекается тот элемент, который был первым вставлен в очередь. В соответствии с правилами этой операции очередь еще называют структурой типа FIFO (“first in – first out”).

Никакие другие операции над классической очередью недопустимы.

     Из механизма FIFO следует, что в очереди доступны два элемента – первый и последний.

Первый способ представляет очередь в виде массива и двух целочисленных переменных start и end.

Обычно start указывает на голову очереди, end — на элемент, который заполнится, когда в очередь войдёт новый элемент. При добавлении элемента в очередь в q[end] записывается новый элемент очереди, а end уменьшается на единицу. Если значение end становится меньше 1, то мы как бы циклически обходим массив и значение переменной становится равным n. Извлечение элемента из очереди производится аналогично: после извлечения элемента q[start] из очереди переменная start уменьшается на 1. С такими алгоритмами одна ячейка из n всегда будет незанятой (так как очередь с n элементами невозможно отличить от пустой), что компенсируется простотой алгоритмов.

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

69. Структура данных очередь. Кольцевая очередь. Реализация очереди с использованием массива.В общем случае, очередь – это линейный список, доступ к элементам которого происходит по принципу F I F O (First In and First Out – первым пришел и первым ушел).

Для очереди характерны две операции – занесение элемента в очередь и извлечение (считывание) элемента из очереди. В простой очереди для работы с данными доступны две позиции – начало (из этой позиции происходит извлечение) и конец (в эту позицию заносится входящий элемент) или "голова" и "хвост". Произвольный доступ к элементам, в отличии от массивов, формально не допускается. Операция извлечения (считывания) формально является разрушающей. Это означает, что считанные данные становятся недоступными. Возможно, явного разрушения (уничтожения) данных и не происходит, но к ним нет доступа, используя стандартные операции работы с очередью.Области применения очередей могут быть разделены на две группы – системное применение и прикладное. К применению очередей в системных целях относятся: диспетчеризация задач операционной системой;

буферизация ввода/вывода;Прикладное применение: моделирование процессов (например, систем массового обслуживания);использование очередей как вспомогательных структур данных в каких-либо алгоритмах (например, при поиске в графах).Одним из примеров очереди является машина Тьюринга. Более простым механическим примером является труба с текущей только в одном направлении жидкостью.Классификация очередей. По архитектуре очереди делятся на линейные и кольцевые (циклические). По количеству позиций записи и считывания – на простые и приоритетные. Кроме того существует специальный вид очереди – двухвходовая очередь или дек (DEQue – Double Ended Queue; queue – очередь).

На практике очереди могут реализовываться при помощи одномерных массивов или свЯзных списков, что хорошо иллюстрирует различие между логическим и физическим уровнями структур данных (массив на физическом уровне является очередью на логическом).

Ниже приведёны примеры процедур занесения и извлечения для линейной очереди на языках Паскаль и Си++.Работа с линейной очередью, построенной на основе массива, становится невозможной (как запись, так и считывание), когда будет достигнут предельный размер массива, используемого для хранения очереди.Кольцевая очередь

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