|
|||
Проектирование последовательного потока управления.Стр 1 из 6Следующая ⇒ 17. Проектирование последовательного потока управления.
Управляющие операторы, описанные в этой главе, не являются необходимыми для программирования. Действие каждого из них может быть получено комбинацией ранее рассмотренных операторов. Однако, каждый оператор удобен в определенных ситуациях при разработке программ и программист, который имеет их под рукой, часто считает их использование естественным.
Операторы CASE, FOR и REPEAT рассмотренные в этой главе позволяют программисту выражать свои намерения точно и более естественно, чем использую набор CF Pascal. Когда оператор IF выбирает один из двух вариантов, оператор CASE позволяет выбирать одну из нескольких альтернатив. Как и оператор WHILE, FOR и REPEAT управляют итерациями. Оператор FOR управляется подсчетом итераций, таким образом, использование операторов FOR естественно для ситуаций, когда необходимо выполнить определенное количество повторяющихся действий. Наоборот, оператор WHILE подходит для ситуаций, когда количество итераций неизвестно, но известно условие завершения цикла. В WHILE цикл может быть бесконечным, а в FOR – не может. Оператор REPEAT также управляет неограниченным циклом, но тогда как проверка WHILE на завершение происходит перед каждой итерацией и выражается в форме условия, которое должно удовлетворяться для продолжения, REPEAT выполняет проверку после каждой итерации и это происходит в форме условия, которое должно удовлетворяться для завершения.
17.1. Оператор CASE.
Мы использовали вложенные IF для выбора одного оператора из нескольких. Оператор CASE может часто заменять вложенные IF с выигрышем в наглядности и эффективности.
Оператор CASE строится из выражения порядкового типа для выбора и списка операторов, каждый из которых отмечен одной или более константами того же порядкового типа. Например, в
CASE A > B OF TRUE: Max := A; FALSE: Max := B; END
выражение для выбора будет A > B типа BOOLEAN, а метками будут константы того же типа TRUE и FALSE. Выражение для выбора вычисляется и оператор, помеченный соответствующей меткой, выбирается для выполнения. После того как выбранный оператор завершает выполнение, управление передается оператору, следующему за оператором CASE. Константные метки не могут повторяться, поэтому выполнено будет не более одного оператора. Если не существует оператора с меткой имеющей значение выражения для выбора, результат выполнения оператора CASE неопределен. Оператор CASE может быть симулирован вложенными операторами IF. Рассмотрим оператор CASE:
CASE Exp OF L1a, L1b: S1; L2 : S2; ...; LN: SN END
оператор IF
IF (Exp = L1a) OR (Exp = L1b) THEN S1 ELSE IF Exp = L2 THEN S2 ELSE ... ELSE IF Exp = LN THEN SN
Выполняет те же действия, когда значение Exp является одним из L1a, L1b, L2, ..., LN. Однако когда значение Exp не входит в набор вариантов, оператор IF работает как пустой оператор, а оператор CASE неопределен. Большинство Паскаль-машин реализуют оператор CASE некорректно, и он в случае отсутствия варианта работает аналогично соответствующему оператору IF. Использование оператора CASE сокращает глубину вложенности операторов и необходимость в логических операторах, повышая читаемость программы. Также оператор CASE более эффективен, чем IF, поскольку весь весь оператор CASE вычисляется один раз, а для вложенных IF выполняется множество сравнений.
|
|||
|