布尔真值表C ++

时间:2018-09-25 19:17:54

标签: c++ truthtable

(p-> q)<-> [(r ^ t)v(not)s]

这个方程式是我的老师给我们的,用来为我们编写一个真值表。我已经由老师进行了检查,但是在尝试填充数组时遇到了问题:

bool p[32] = { false };
bool q[32] = { false }; 
bool r[32] = { false };
bool s[32] = { false };
bool t[32] = { false };

我知道我正在尝试分配未预留的内存(通过执行以下操作获取“变量'p'周围的堆栈已损坏”):

for (int i = 0; i < counter; i++)           
    {
        toTrue[i] = true;
        for (int j = (counter * 2); j < (counter * 3); j++)     
        {
            toTrue[j] = true;
            for (int k = (counter * 4); k < (counter * 5); k++)     
            {
                toTrue[k] = true;
                for (int l = (counter * 6); l < (counter * 7); l++)     
                {
                    toTrue[l] = true;
                    for (int m = (counter * 8); m < (counter * 9); m++)     
                    {
                        toTrue[m];
                    }
                }
            }
        }
    }

这只是基于基本真值表,在其中会生成基本的2变量或真值表:

a b    c
1 1    1
1 0    1
0 1    1
0 0    0

我不确定如何在不使用向量的情况下解决此问题,我对这方面的知识非常了解,因此不能百分百地确信要使用该向量。我的另一个想法是尝试创建用于填充p,然后q,然后r等的多种方法。但是我的老师之前已经告诉我,我正在扩展代码,超出了我的需要,并且我喜欢做多种方法,例如那会导致他说同样的话。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

另一种简单的方法。

#include<iostream>

using namespace std;


int main( int argc, char* argv[]) {

    bool p,q,r,s,t;

    cout << "p  q  r  s  t  (p -> q) <-> [( r ^ t ) v (not) s] \n";
    for ( int i = 0 ; i < 32 ; i++ ) {

        p = ( i >> 0 ) & 0x01;
        q = ( i >> 1 ) & 0x01;
        r = ( i >> 2 ) & 0x01;
        s = ( i >> 3 ) & 0x01;
        t = ( i >> 4 ) & 0x01;

        cout << p << "  ";
        cout << q << "  ";
        cout << r << "  ";
        cout << s << "  ";
        cout << t << "  ";

        cout  << ((!p || q)  == (( r ^ t ) ||  !s));

        cout << endl;
    }
    return 0;
}