Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_лекции.doc
Скачиваний:
45
Добавлен:
25.11.2018
Размер:
5.13 Mб
Скачать

12.6. Исключительные ситуации

Для чего они нужны? Допустим, что у тебя есть участок кода, где может произойти ошибка. Как сделать так, чтобы программа не вылетала при её возникновении? Очень просто. Надо заключить этот код в блок проверки исключений и тогда твоя программа выдержит даже цунами.

Блок try...except (рис. 12.1) служит для обработки конкретных исключительных ситуаций (или более кратко - исключений). Этот блок имеет два наиболее характерных способа записи (полный и сокращенный), первый из которых неформально можно представить в следующем виде:

try

<СписокОператоров1>

except

on <Исключение1> do <Оператор1>;

on <Исключение2> do <Оператор2>;

. . . .

on <ИсключениеN> do <ОператорN>

else <СписокОператоровM>

end;

Рисунок 12.1 - Исключительные ситуации

Опишем принцип работы полного варианта блока try...ехсерt. Если в процессе работы проекта ошибок времени выполнения не происходит, то наличие блока обработки исключительных ситуаций никакого влияния на работу не оказывает. Если же при выполнении СпискаОператоро1 между зарезервированными словами try и except возникает исключительная ситуация, то выполнение СпискаОператоров1 прерывается, и управление передается в блок обработки исключения (Exception Block), который по структуре похож на оператор case. В случае, когда возникшая исключительная ситуация совпадает с одним из заголовков альтернатив on...do, то выполняется соответствующий этой альтернативе Оператор, в противном случае выполняется СписокОператоров2 (после зарезервированного слова else).

Кроме описанного полного варианта записи блока try...except, возможен еще и сокращенный, который в неформальном синтаксисе выглядит так:

try

<СписокОператоров1>

except

<СписокОператоров2>

end;

При использовании такого блока обработки исключений управление на Список0ператоров2 будет передано при любой ошибке, возникшей в процессе выполнения СпискаОператоров1. Если же ошибок при обработке СпискаОператоров1 не было, то СписокОператоров2 также, как и в полном варианте блока try...except, выполняться не будет.

Рассмотрим простейший пример:

TRY

x:=y/0;

EXCEPT

// Здесь можно вывести сообщение об ошибке.

END;

x:=0;

Между TRY и EXCEPT я вставил маленькое действие - деление на ноль. Компьютер не умеет делать такие вещи, поэтому произойдёт ошибка и выполнится код между EXCEPT и END. После обработки ошибки процедура заканчивает выполнение и все остальные операторы не будут выполнены, как, например, в нашем случае - x:=0; Если бы мы поменяли 0 на любое другое число, то ошибки бы не было, и код между EXCEPT и END никогда не выполнился бы.

Лекция 13 Циклы

13.1. Функции цикла в программе. Циклы с пред- и постусловием

Алгоритмы решения многих задач являются циклическими, т. е. для дости­жения результата определенная последовательность действии должна быть выполнена несколько раз. Например, программа контроля знаний выводит вопрос, принимает ответ, добавляет оценку за ответ к сумме баллов, затем повторяет это действие еще раз, и еще до тех пор, пока не будут выведены все вопросы. Другой пример. Чтобы найти фамилию человека в списке, на­до проверить первую фамилию списка, затем вторую, третью и т. д. до тех пор, пока не будет, найдена нужная или не будет достигнут конец списка. Такие повторяющиеся действия называются циклами и реализуются в про­грамме с использованием инструкций циклов. Любой алгоритм циклической структуры в общем случае содержит следующие действия: задание начальных значений переменных; действия, выполняемые непосредственно в цикле, называемые телом цикла; изменение значений переменных цикла по некоторому закону; проверка условия продолжения или окончания цикла.

Имеется три разновидности циклов:

  • цикл с предусловием;

  • цикл с постусловием;

  • цикл с параметром.

Оператор цикла с предусловием выполняется до тех пор, пока условие принимает значение истина. На каждом шаге цикла вычисляется значение условия, и затем выполняется тело цикла, если условие истинно, если на первом шаге цикла условие принимает ложное значение, то цикл с предусловием не выполнится ни разу. Примером такого цикла является цикл с оператором while.

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

В цикле с параметром вычисляется значение выражения и на каждом шаге счетчик цикла принимает последовательно все значения от начального до конечного. Примером может служить цикл с оператором for.

Отличие циклов с предусловием и постусловием

1) Цикл с предусловием выполняется пока условие истинно. Цикл с постусловием выполняется пока условие ложно.

2) Тело цикла с постусловием выполнится всегда хотя бы один раз. Тело цикла с предусловием может не выполниться ни разу.

3) Если тело цикла repeat - until представляет собой составной оператор, то операторные скобки begin - end можно опустить.