Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оператор ветвления case

Else

Оператор ветвления if

Составной оператор

 

Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой и заключенную в так называемые операторные скобки - begin и end:

 

begin

<оператор 1>;

<оператор 2>;

 

<оператор N>

end

 

Частным случаем составного оператора является тело следующей программы:

 

var

X, Y: Integer;

begin

X:= 4;

Y:= 6;

Edit.Text:=IntToStr(X + Y); // Точка с запятой после этого оператора

не обязательна

end.

 

Хотя символ точки с запятой служит разделителем между операторами и перед словом end может опускаться, мы рекомендуем ставить его в конце каждого оператора (как в примере), чтобы придать программе более красивый вид и избежать потенциальных ошибок при наборе текста.

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

 

 

Оператор ветвления if - одно из самых популярных средств, изменяющих естественный порядок выполнения операторов программы. Вот его общий вид:

 

if <условие> then

<оператор 1 >

<оператор 2 >;

 

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

При выполнении условного оператора сначала вычисляется условие, результат которого может принимать только булевский тип, а затем, в зависимости от значения результата (True, False), выполняется Оператор1, стоящий после ключевого слова then (если результат равен True), или Оператор2, стоящий после ключевого слова else (если результат равен False).

 

Поясним сказанное на примере:

var

A, B, C: Integer;

begin

A:= 2;

B:= 8;

if A > B then

C:= A

else

C:= B;

Edit.Text:=IntToStr(C);

end.

 

В данном случае значение выражения А > В ложно, следовательно появится сообщение C=8.

У оператора if существует и другая форма, в которой else отсутствует:

 

if <условие> then <оператор>;

 

Логика работы этого оператора if еще проще: выполнить оператор, если условие истинно, и пропустить оператор, если оно ложно. Поясним сказанное на примере:

 

var

A, B, C: Integer;

begin

A:= 2;

B:= 8;

C:= 0;

if A > B then C:= A + B;

Edit.Text:=IntToStr(C);

end.

 

В результате на экране появится сообщение С=0, поскольку выражение А > В ложно и присваивание С:= А + В пропускается.

Один оператор if может входить в состав другого оператора if. В таком случае говорят о вложенности операторов. При вложенности операторов каждое else соответствует тому then, которое непосредственно ему предшествует. Например:

 

var

A: Integer;

begin

Readln(A);

if A >= 0 then

if A <= 100 then

Edit1.Text:= 'A попадает в диапазон 0 - 100.';

else

Edit1.Text:= 'A больше 100.';

else

Edit1.Text:= 'A меньше 0.';

end.

 

Конструкций со степенью вложенности более 2-3 лучше избегать из-за сложности их анализа при отладке программ.

 

 

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

 

case <переключатель> of

<список 1 значений переключателя>: <оператор 1>;

<список 2 значений переключателя>: <оператор 2>;

……

<список N значений переключателя>: <оператор N>;

else <оператор N+1>

end;

 

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

Переключатель должен принадлежать порядковому типу данных. Использовать вещественные и строковые типы в качестве переключателя не допускается.

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

case StrToInt(Edit1.text) of

20..31: Label1.Caption:= 'День попадает в диапазон 20 - 31.';

1, 5..10: Label1.Caption:= 'День попадает в диапазон 1, 5 - 10.';

else Label1.Caption := 'День не попадает в заданные диапазоны.';

end;

 

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

 

case StrToInt(Edit1.text) of

1, 5..10: Label1.Caption:= 'День попадает в диапазон 1, 5 - 10.';

20..31: Label1.Caption:= 'День попадает в диапазон 20 - 31.';

else Label1.Caption := 'День не попадает в заданные диапазоны.';

end;

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

 

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

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

try

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

except

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

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

....

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

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

end;

Рисунок 16.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 никогда не выполнился бы.

<== предыдущая лекция | следующая лекция ==>
Операции отношения | Функции цикла в программе. Циклы с пред- и постусловием
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 731; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.