【发布时间】:2018-09-25 19:17:54
【问题描述】:
(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 变量 OR 真值表:
a b c
1 1 1
1 0 1
0 1 1
0 0 0
我不确定如何在不使用向量的情况下解决此问题,我对此知之甚少,因此不能 100% 有信心走这条路。我的另一个想法是尝试创建多种方法来填充 p,然后是 q,然后是 r 等。但是我的老师之前已经告诉我,我扩展代码的程度超出了我的需要,我想做多种方法,例如这会导致他说同样的话。有什么建议吗?
【问题讨论】:
-
我不知道你的循环试图做什么,
toTrue[m];行只是增加了关于代码意图的混乱。 -
您是否尝试过使用调试器单步执行代码?它应该有助于阐明情况。
-
为什么不使用整数作为 0 到 32 的计数器,其中每个位代表 p,q,r,s,t 的真值,通过掩码计算和打印得到它们。
-
@Cameron 是正确的 95% 的我打算在这里提出的问题从未被问到,因为我是在调试它们。 Bailey,如果你还不知道调试器,它是你最好的朋友。
-
如果所有五个循环都从 0 迭代到 1,然后在内部循环中将所有这些位组合成一个值,您的代码将更加简单和清晰更容易理解,隐藏错误的地方更少。
标签: c++ truthtable