
23 Логічний тип. Логічні вирази. Логічний оператор присвоєння
Для зберігання результатів логічних виразів існує тип даних Boolean (булев).
.Логічний тип (boolean) має лише два значення: true (1 – істинно) і false (0 – хибно).
Слова false і true – це логічні константи мови.
В програмах можливо вводити константи і змінні цього типу. Наприклад:
const b = true;
var c : boolean;
Логічний вираз – це спосіб запису на мові програмування умов для пошуку необхідних даних.
Простий логічний вираз – це два операнди, які об’єднані операцією порівняння (операцією відношення).
Операції порівняння:
> (більше), < (менше), = (дорівнює), <> (не дорівнює),
>= (більше або дорівнює чи не менше ), <= (менше або дорівнює чи не більше).
Наприклад:
Нехай х = 3, у = –9. Прості логічні вирази:
х = 3 true (істинно); х < y ;
х+1<y false (хибно).
Складений логічний вираз – це логічний вираз, який записаний за допомогою булевих операцій.
Булеві операції:
not – логічне заперечення («логічне НЕ»),
and – логічне множення («логічне І»),
or – логічне додавання («логічне АБО»),
xor – додавання за модулем 2 («виключне АБО»).
Слова not, and, or і xor, що позначають булеві операції, є зарезервованими словами.
Таблиця істинності
A |
B |
not A
|
A and B |
A or B |
A xor B |
|||||||
НЕ |
І |
* |
АБО |
+ |
виключне АБО |
|||||||
True |
1 |
true |
1 |
false |
0 |
true |
1 |
true |
1 |
false |
0 |
|
True |
1 |
false |
0 |
false |
0 |
false |
0 |
true |
1 |
true |
1 |
|
False |
0 |
true |
1 |
true |
1 |
false |
0 |
true |
1 |
true |
1 |
|
false |
0 |
false |
0 |
true |
1 |
false |
0 |
false |
0 |
false |
0 |
Операція заперечення завжди дає протилежне вихідному значенню.
Операція І істинна тільки в тому випадку, коли обидва зв’язані операнди істинні.
Операція АБО істинна, якщо хоча б один з операндів є істинним, а виключне АБО істинне, якщо тільки один з операндів є істинним.
Наприклад:
Нехай х = 3, у = –9. Складні логічні вирази:
not (y<=-50) not false true
Подвійне рівняння 1<х<5 записують як складний логічний вираз:
(1 < x) and (x <5), якщо x=3, то (1 < x) = true, (x <5)= true, true and true = true
Нехай є складний логічний вираз:
(x > 4) or (y >–15), якщо x=3, y= –9, то (x > 4) = false,
(y >–15)= true,
false or true = true
Прості логічні вирази, із яких складаються складні, завжди беруться у дужки.
Логічні вирази можливо присвоювати змінним. Наприклад, якщо потрібно перевірити чи належить значення дійсної змінної х відрізку [0; 1], треба використати наступний логічний вираз (0 >= x) and (x <=1). Тому задача буде вирішуватися наступним чином.
Program Ex_3;
var x : real;
flag : boolean;
begin
writeln('Enter x');
readln(x);
flag := (0 <= x)and(x <= 1);
write ('x belongs to [0; 1] - ', flag);
end.
Результат виконання програми
Пріоритети операцій порівняння і булевих операцій
Всі операції порівняння мають рівний пріоритет і виконуються зліва направо.
З булевих операцій найвищий пріоритет має not, за ним іде and, потім or і xor.
Група булевих операцій має пріоритет, вищий за групу порівняння.
Змінити порядок обчислення можна за допомогою круглих дужок.
Зверніть увагу
Компілятор Delphi підтримує два режими обчислення булевих виразів:
режим повного та режим неповного обчислення. Ці режими стосуються операторів and і or. У режимі повного обчислення компілятор продовжує обчислення кожної логічного множення та логічного додавання, навіть якщо результат усього виразу вже відомий. Нехай, наприклад, є вираз A or В, де А та В – деякі вирази. Значення виразу А дорівнює True. Тоді вираз В можна не обчислювати, тому що вже відомо, що результуючий вираз істинний. Проте в режимі повного обчислення процесор обробляє обидва вирази – як А, так і В. У режимі неповного обчислення компілятор конструює процес таким чином, що обчислення припиняється, як тільки стає відомим результат усього виразу. Застосування режиму повного обчислення обов'язково, коли один з операндів – функція, що додатково виконує які-небудь інші дії. Звичайно режим неповного обчислення є кращим, тому що в цьому випадку виконуваний код працює швидше й займає в пам'яті менше місця. Крім того, у режимі неповного обчислення можна створювати конструкції, які в режимі повного обчислення викликали б під час виконання помилку. Розглянемо, наприклад, наступний булевий вираз:
(demon < > 0.0) and ((number/demon) > 1.0)
Якщо змінна demon дорівнює 0, то перше вираз хибний. Отже, весь вираз хибний й другий вираз можна не обчислювати. Однак у режимі повного обчислення програма спробує обчислити другий вираз, у результаті чого відбудеться помилка ділення на нуль.
За замовчуванням компілятор установлений у режим неповного обчислення. Директива цього режиму має вигляд {$В–} або {$booleval off). Для локального включення режиму повного обчислення можна використати директиву {$В+} або {$booleval on}. У середовищі Delphi компілятор можна переключити в режим повного обчислення для всього проекту. Для цього потрібно вибрати команду Project( Options... (Проект(Параметри...) і в розділі Syntax options (Параметри синтаксису) вкладки Compiler (Компілятор) установити прапорець Complete Boolean eval (Повне булеве обчислення).