【问题标题】:Bool A, B and C truth combination布尔 A、B 和 C 真值组合
【发布时间】:2017-03-15 04:24:37
【问题描述】:

我需要结合 3 个布尔值来测试 C++ 中的整个真值表(8 个组合)。

我有 2 个特殊情况需要注意,它们是 a、b 和 c 都为真,a、b 为真但 c 为假。

其余的不需要特别照顾(它们将自动一起工作,无需特定案例的说明)

有没有办法只测试这两个案例,然后是个别案例,但仍然允许个人一起工作?

比如,

如果(a && b && c)

如果(a && b && !c)

那么如果a,如果b,如果c分别

我认为它使用 if else,但我没有运气,我现在拥有它的方式执行一些操作两次,因为“a”在 a b c、a b !c 和 a 中都是正确的。

我希望这足够清楚,我是第一次在这里发帖,如果不是很抱歉。

【问题讨论】:

    标签: c++ boolean truthtable


    【解决方案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]();
    

    【讨论】:

    • 感谢您的回答,我将如何单独测试其他 3 个案例,而不重复过程(a、b 和 c 都是“如果为真,请执行此操作”)
    • @quantumspade:如果需要,该表可以在多个位置包含指向同一函数的指针。
    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多