Булевы выражения в CF-Паскале

Булевы выражения могут быть включены в состав операторов IF и WHILE языка CF-Паскаль для уменьшения сложности многих программ. В качестве иллюстрации переработаем программу MinSort с использование булевых условий вместо вложенных операторов IF там, где это возможно.

Новые идеи: Булевы выражения языка Паскаль.

SR23. <условие>::= <выражение> <сравнение> <выражение>

| NOT(<условие>)

|(<условие>) AND (<условие>)

|(<условие>) OR (<условие>)

это правило показывает, что любое условие, используемое с булевым оператором, должно быть заключено в скобки.

Примеры выражений с одинаковым значением:

NOT(Ch1 < Ch2) Ch1 >= Ch2
NOT(Ch1 > Ch2) Ch1 <= Ch2
NOT(Ch1 = Ch2) Ch1 <> Ch2
(Ch1 <= Ch2) AND (Ch1 >= Ch2) Ch1 = Ch2
(Ch1 <= Ch2) AND (Ch1 < Ch2) Ch1 < Ch2
(Ch1 <> Ch2) AND (Ch1 > Ch2) Ch1 > Ch2
(Ch1 < Ch2) AND (Ch1 > Ch2) FALSE (как правило, это ошибка)
(Ch1 < Ch2) OR (Ch1 > Ch2) Ch1 <> Ch2
(Ch1 <= Ch2) OR (Ch1 < Ch2) Ch1 <= Ch2
(Ch1 = Ch2) OR (Ch1 <> Ch2) TRUE (как правило, это ошибка)

Булевы тождества и факты могут быть использованы для создания эквивалентных условий языка Паскаль. Например, закон деМоргана:

NOT(P OR Q) = (NOT P) AND (NOT Q)

Означает, что операторы IF, начинающиеся с

IF NOT((Ch1 = Ch2) OR (Ch3 < Ch4))

и

IF (Ch1 <> Ch2) AND (Ch3 >= Ch4)

будут иметь одинаковые действия. Большинству людей более понятен второй вариант.

Булевы выражения очень полезны в программировании. Например:

WHILE (Ch = ‘ ‘) OR (Ch = ‘0’)

DO

READ(Ch)

будет продолжать считывание до первого непробельного ненулевого символа.

IF (Ch >= ‘0’) AND (Ch <= ‘0’)

THEN

WRITE(Ch)

будет печатать только цифры.

Снова семейство программ MinSort.

Булевы выражения позволяют программе MinSort быть улучшенной, создавая новое семейство программ MinSortB. Раздел проекта 3.1 может быть заменен следующим:

Design part 3.1

BEGIN {печатаем минимальное значение из Ch1, Ch2, Ch3 в OUTPUT, оставшиеся значения помещаем в Ch1, Ch2}

IF (Ch1 < Ch2) AND (Ch1 < Ch3)

THEN

{Печатаем Ch1 в OUTPUT, помешаем Ch3 в Ch1}

BEGIN

WRITE(Ch1);

WRITE(Ch1:= Ch3)

END

ELSE

{Печатаем минимум из Ch2, Сh3 в OUTPUT. В случае необходимости копируем Ch3 в Ch2}

IF Ch2 < Ch3

THEN

BEGIN

WRITE(Ch2);

Ch2:= Ch3

END

ELSE

WRITE(Ch3)

END


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: