Значение логических выражений

Значение логического выражения задается следующим рекурсивным определением. Для любого состояния выполнения S:

E1 = E2(S) = (E1(S) = E2(S))

E1 <> E2(S) = (E1(S) ¹ E2(S))

E1 < E2(S) = (E1(S) < E2(S))

E1 <= E2(S) = (E1(S) ≤ E2(S))

E1 > E2(S) = (E1(S) > E2(S))

E1 >= E2(S) = (E1(S) ≥ E2(S))

E1 OR E2(S) = (E1(S) OR E2(S))

NOT E (S) = NOT E (S)

(E) (S) = E (S)

Операторы в левой части – те, что встречаются в Паскаль-программах. Те, которые в правой части – математические операции. Это определение дает значение каждого ператора по отдельности, но не указывает как будет вычисляться выражение с несколькими операторами. Ассоциативность и приоритет операторов в выражении определяется синтаксическими правилами Паскаля. Программное исчисление требут чтобы все операторы были определены, в противном случае математические свойства такие как коммутативность, (которую мы сипользуем чаще, чем предполагаем) нарушаются.

Ввод-вывод логических значений.

Логичесике переменные не могут появляться в операторах READ, но логические выражения могут появляться в операторах WRITE. Логические значения преобразуются в символы и выравниваются по правой стороне строки, длина которой зависит от реализации Паскаль-машины (например, 10 символов).

Последовательность операторов:

Condition:= TRUE;

WRITE(Condition);

Добавляет строку † TRUE† в OUTPUT.

Поиск в файле.

Программа SarahRevere в части 2 распознает слова land и sea в INPUT. Разделы проекта этой программы переработаны с использованием логических перемнных и собраны вновь ниже.

PROGRAM SarahRevere(INPUT, OUTPUT);

VAR

W1, W2, W3, W4: CHAR;

Looking, Land, Sea: BOOLEAN;

BEGIN {SarahRevere}

BEGIN {Инициализируем W1, W2, W3, W4}

W1:= ‘ ‘;

W2:= ‘ ‘;

W3:= ‘ ‘;

W4:= ‘ ‘;

Looking:= TRUE;

Land:= FALSE;

Sea:= FALSE;

END;

WHILE Looking AND NOT (Land OR Sea)

DO

BEGIN

BEGIN {движение окна, проверка на конец данных}

W1:= W2;

W2:= W3;

W3:= W4;

READ(W4);

Looking:= W4 <> ‘#’

END;

BEGIN {проверка окна на land}

Land:= (W1 = ‘l’) AND (W2 = ‘a’) AND

(W3 = ‘n’) AND (w4 = ‘d’)

END;

BEGIN {проверка окна на sea}

Sea:= (W1 = ‘s’) AND (W2 = ‘e’) AND (W3 = ‘a’)

END;

END;

BEGIN {создание сообщения Sarah}

IF Land

THEN

WRITELN(‘The british are coming by land.’)

ELSE

IF Sea

THEN

WRITELN(‘The british are coming by sea.’)

ELSE

WRITELN(‘Sarah didn’t say.’)

END

END. {SarahRevere}

Оператор WHILE управляется выражением:

Looking AND NOT (Land OR Sea)

которое разрешает телу цикла выплняться до тех пор пока значение Looking равно TRUE и оба значения Land и Sea равны FALSE. Looking присваивается значение False когда встречается #:

Looking:= W4 <> ‘#’

Land и Sea присваивается TRUE если W1, W2, W3, W4 содержат соотвествующую строку.

Использование логических переменных сократило программу с 57 строк до 43.


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



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