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

В этом случае удобно воспользоваться более общей оператор выбора, который имеет формат:
CASE <константа выбора> OF <константа> : <оперератор> ELSE <оператор> END
Все перечисленные константы должны быть различными. Оператор выбора трактуется следующим образом. Если значение выражения равно одной из перечисленных констант, выполняется команда, записанная после этой константы, и на этом выполнение оператора выбора заканчивается. Если значение выражения отличается от всех перечисленных констант, Паскаль фиксирует ошибку. Для таких случаев в Pascal допустимо использование альтернативной ветви после служебного слова Else.

Наконец, если для некоторых значений нужно выполнить несколько операторов, эти операторы следует заключить между словами BEGIN и END.
Рассмотрим элементы этой конструкции. Во-первых, это три зарезервированных слова: case, of и end . Между case и of находится выражение (k+l)2 , принимающее значение, которое, возможно, имеется в одном из списков значений, находящихся слева от двоеточий. Данное выражение называется селектором оператора case. Каждый оператор, идущий за двоеточием, отделяется от следующего списка значений точкой с запятой. Ветвь else, отвечающая всем не перечисленным значениям выражения (k+l)2, необязательна. При выполнении данного оператора вначале вычисляется значение селектора. Затем выбирается тот список значений, которому принадлежит полученное значение, и выполняется соответствующий оператор.
В списках значений оператора case допустимыми являются типы переменных, называемые скалярными, включая целые и исключая вещественные типы. Любое заданное значение селектора может входить в список значений неоднократно, но выполняться будет лишь первая подходящая ветвь. Замечу, что «стилистически» такая конструкция выглядит не очень изящно. Если значение селектора отсутствует в списках значений, ни одна из альтернатив выполняться не будет. В этом случае выполняется ветвь else оператора case или (если эта ветвь отсутствует) следующий за case оператор.

Оставить комментарий