Основы объектно-ориентированного программирования на языке C# book | Page 62
4 Булевi функцiı̈ та вирази
// виведемо на екран поточну комбiнацiю,
// позначаючи false як 0 i true як 1
for (int i = 0; i < n; i++)
Console.Write(x[i] ? ’1’ : ’0’);
Console.WriteLine();
// сформуємо чергову комбiнацiю
// для цього будемо розглядати x як зображення
// n-цифрового двiйкового числа
// (x[i]=true, якщо i-та цифра числа = 1, iнакше x[i]=false)
// якщо поточна комбiнацiя – зображення числа N,
// то наступною комбiнацiєю зробимо зображенням числа N+1
// для додавання одиницi використаємо простий варiант
// алгоритму додавання в стовпчик
bool carry = true;
// iндикатор переносу
// цикл по цифрах, починаючи з останньої (молодший розряд)
for (int i = n - 1; i >= 0; i--)
{
if (x[i] && carry)
x[i] = false;
else
{
x[i] = x[i] || carry;
carry = false;
}
}
// якщо маємо перенiс пiсля циклу, це означає,
// що сума не може бути зображеня N-цифровим двiйковим
// числом, тобто бiльша за 2 N − 1;
// оскiльки на кожнiй iтерацiї циклу ми додавали 1
// починаючи з масиву x, що зображає число нуль, то це
// означає, що ми вже перебрали 2 N комбiнацiй
// i перебiр необхiдно завершити
if (carry) break;
}
}
}
Наприклад, при n = 3 програма виводить на екран таку послiдов-
нiсть з 2 3 = 8 рядкiв:
000
001
010
011
100
101
110
111
4.3 Завдання для самостiйноı̈ роботи
1. Написати програму, яка виводить на консоль таблицi iстинностi
булевих функцiй, зображених такими булевими виразами:
a) (x 1 ∨ x 2 ) ∧ x 3
62