Основы объектно-ориентированного программирования на языке C# book | Page 61

4.2 Булевi вирази
з будь-яким значенням є хибне значення ). В iншому випадку , другий аргумент обчислюється i його значення стає значенням операцiï . Аналогiчно , якщо перший аргумент операцiï || має значення true , то другий не обчислюється , а результатом операцiï є true . Iнакше , обчислюється другий аргумент i його значення стає значенням операцiï . Через зазначену особливiсть у наведеному нижче умовному операторi не буде вiдбуватися спроба дiлення на нуль , якщо змiнна x ( цiлого типу ) має значення нуль :
if ( x != 0 && y / x > 1 ) { }
В той же час , виконання наведеного нижче оператору призведе до спроба дiлення на нуль ( помилки пiд час виконання програми ), якщо змiнна x ( цiлого типу ) має значення нуль :
if ( y / x > 1 && x != 0 ) { }
Таким чином , в загальному випадку операцiï && та || в мовi C # не можна вважати комутативними на вiдмiну вiд математичних операцiй кон ’ юнкцiï та диз ’ юнкцiï . Проте ïх можна вважати комутативним , якщо вони застосовуються до змiнних типу bool , а не до складних виразiв . Наприклад , якщо визначеннi булевi змiннi :
bool b1 = true ; bool b2 = false ;
то значення виразiв b1 && b2 i b2 && b1 визначенi i однаковi . У текстi програми операцiя && має бiльш високий прiоритет , нiж
||, а операцiя заперечення ! має бiльш високий прiоритет , нiж &&. Це дозволяє записувати булевi вирази , не використовуючи зайвих дужок . Iнодi виникає необхiднiсть створювати програми , якi працють з великою або наперед невiдомою кiлькiстю булевих змiнних . В таких випадках можна скористатись масивом булевих змiнних .
Розглянемо фрагмент програми на мовi C # яка перебирає усi комбiнацiï значень n булевих змiнних , що елементами масиву ( який можна використати при формуваннi таблицi iстинностi деякоï булевоï функцiï n змiнних ):
using System ; class Program { static void Main ( string [] args ) { int n = 3 ; // визначимо масив з n булевих змiнних // зауважимо , що спочатку усi x [ i ] матимуть значення false bool [] x = new bool [ n ]; // перебiр усiх 2 N комбiнацiй значень елементiв масиву x while ( true ) {
61