КАТЕГОРИИ: Архитектура-(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
Оператор case относится к структурам условного управления языка Object Pascal. Он выбирает один из нескольких возможных путей (блоков кода) и выполняет его. Выбор пути основан на анализе значения селектора. Селектор может быть переменной, функцией, любым допустимым выражением. Рассмотрим следующий пример оператора case: { Вычисляем размер штрафа Fine за превышение скорости. Размер штрафа пропорционален величине превышения, выраженной в км/час (AmountOverSpeedLimit). Если скорость превышена более чем на 30 км/час водитель лишается прав на срок JailTime. } case AmountOverSpeedLimit of 0: Fine:= 0; 10: Fine:= 20; 15: Fine:= 50; 20, 25, 30: Fine:= AmountOverSpeedLimit * 10; else begin Fine:= GoToCourt; JailTime:= GetSentence; end; end; // case
Оператор case состоит из нескольких частей. Вначале определяется выражение–селектор. В нашем примере селектором является переменная AmountOverSpeedLimit. Затем следуют определения ветвей, каждая из которых соответствует либо конкретному значению селектора, либо серии возможных значений селектора. Так, если значение AmountOverSpeedLimit равно 0, будет выбрана ветвь 0:. Переменная Fine получит значение 0. Если значение AmountOverSpeedLimit равно 10, переменная Fine получит значение 20, и т.д. Как только нужная ветвь найдена и выполнен связанный с ней оператор, оставшиеся случаи игнорируются. Ситуации когда переменная AmountOverSpeedLimit может оказаться равной 20, 25, или 30 объединены в один случай, которому соответствует вычисление штрафа по формуле
Fine:= AmountOverSpeedLimit * 10;.
Вместо перечисления значений здесь можно было бы написать и так
20..30: Fine:= AmountOverSpeedLimit * 10;.
т.е. указать случай как отрезок значений селектора. Наконец, в составе case мы видим оператор else. Блок кода, расположенный после ключевого слова else, будет выполнен если значение селектора не подпадает ни под один из случаев. Наличие else – ветви в составе оператора case необязятельно.
ПРАВИЛО. Селектором в операторе case может быть выражение любого упорядоченного типа (Integer, Word, Byte, Char, Cardinal и т.п.).
Ветви оператора case взаимно исключают друг друга – может быть выполнена только одна из них.
Строковый или вещественный типы селекторов недопустимы:
case SomeStringVariable of 'One': { code } 'Two': { code } end;
Синтаксис оператора case имеет вид
case selector of value_1: statements_1; value_2: statements_2; . . . value_n: statements_n; else else_statements; end;
Оператор case выполняет один из блоков кода, выбирая его по значению выражения–селектора (selector). Тип выражения селектора относится к одному из упорядоченных типов Object Pascal. Блок кода statements_1 выполняется при условии что значение selector равно (соответствует) value_1, блок кода statements_2 выполняется при условии что значение selector равно (соответствует) value_2 и т.д. Если значение селектора не соответствует ни одной из ветвей value_1...value_n выполняется блок else_statements. Блок else не обязателен.
Дата добавления: 2015-04-29; Просмотров: 415; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |