2016-11-01 6 views
-6

Мне нужно объединить 3 bools для проверки всей таблицы истинности (8 комбинаций) в C++.Комбинация истинности Bool A, B и C

У меня есть 2 специальных случая, в которых нужно следить, они a, b и c являются истинными, а a, b истинны, но c ложно.

Остальные не должен быть обслужен специально (они будут работать автоматически вместе без указания конкретного специфического)

есть способ только испытания для этих двух случаев, а затем отдельные случаи, но все-таки позволяют людям работать вместе?

Такие, как,

, если (а & & б & & с)

и если (а & & б & &! С)

затем, если, если б, если с соответственно

Я думаю, что он использует, если иначе, но мне не повезло, путь Теперь я выполняю некоторые операции дважды, так как «a» истинно в b c, a b! C, а также в a.

Надеюсь, что это достаточно ясно, мой первый пост, здесь, извините, если это не так.

ответ

1

Ваши два случая могут быть обработаны что-то вроде:

if (a && b) 
    if (c) 
     all_true(); 
    else 
     ab_true_c_false(); 

Другая возможность объединить три арифметически, а затем использовать результат в качестве индекса:

typedef void (*action)(); 

// handlers for the individual cases: 
void all_false() { std::cout << "all_false"; } 
void a_true() { std::cout << "a true"; } 
// ... 

// table of handlers. The order of handlers in the array is critical. 
static const action actions[] = { 
    all_false, a_true, b_true, ab_true, 
    c_true, ac_true, bc_true, abc_true }; 

// Create index into array 
int x = a | (b << 1) | (c << 2); 

// invoke correct handler:  
actions[x](); 
+0

Спасибо за ответ, как бы я затем тестировал другие 3 случая отдельно, не повторяя процессы (a, b и c - все «если это правда») – quantumspade

+0

@quantumspade: таблица может содержать указатели на одну и ту же функцию в нескольких местах, если это необходимо. –