Для оперирования логическими (булевскими) значениями предназначен тип bool. Множество значений этого типа состоит из двух элементов: false и true.
| Логика | C++ | Смысл |
|---|---|---|
| 0 | false | ложь |
| 1 | true | истина |
Для булевских значений язык C++ предоставляет три операции: отрицание (“не”) !, конъюнкция (“и”) && и дизъюнкция (“или”) ||.
Ниже приведены таблицы истинности этих операций.
Не, a |
0 |
1 |
|---|---|---|
!a |
1 |
0 |
И, && |
0 |
1 |
|---|---|---|
0 |
0 |
0 |
1 |
0 |
1 |
Или, || |
0 |
1 |
|---|---|---|
0 |
0 |
1 |
1 |
1 |
1 |
Операция “исключающее или” (xor) соответствует ситуации “или-или”:
| Xor | 0 |
1 |
|---|---|---|
0 |
0 |
1 |
1 |
1 |
0 |
Отрицание “исключающего или” даёт операцию, известную как “эквиваленция”:
| Xnor | 0 |
1 |
|---|---|---|
0 |
1 |
0 |
1 |
0 |
1 |
Реализовать и протестировать функцию xor. Использовать операции !, &&, ||.
Реализовать и протестировать функцию xnor. Использовать операции !, &&, ||.
Операции “и-не” (not and, nand) и “или-не” (not or, nor) могут быть получены из “и” и “или” отрицанием.
| Nand | 0 |
1 |
|---|---|---|
0 |
1 |
1 |
1 |
1 |
0 |
bool nand(bool a, bool b)
{
return !(a && b);
}
| Nor | 0 |
1 |
|---|---|---|
0 |
1 |
0 |
1 |
0 |
0 |
bool nor(bool a, bool b)
{
return !(a || b);
}
Nand и nor замечательны тем, что каждая из них образует базис всего множества возможных булевских операций. Например, реализовать через nand/nor отрицание очень легко:
bool nand_not(bool a) { return nand(a, a); }
bool nor_not(bool a) { return nor(a, a); }Теперь не составит труда реализовать “или” (or) через nor и “и” (and) через nand:
bool nand_and(bool a, bool b)
{
return nand_not(nand(a, b));
}
bool nor_or(bool a, bool b)
{
return nor_not(nor(a, b));
}Чтобы убедиться в корректности данных функций, можно составить простую тестировочную программу, выводящую таблицу истинности. Например, для nor_or:
int main()
{
cout << nor_or(false, false) << ' ' << nor_or(false, true) << '\n';
cout << nor_or(true, false) << ' ' << nor_or(true, true) << endl;
return 0;
}Реализовать и протестировать функцию nand_or (реализация or через nand).
Реализовать и протестировать функцию nor_and (реализация and через nor).
Кувшинов Д.Р. © 2016