【发布时间】:2015-01-21 03:54:52
【问题描述】:
我需要编写一个函数,它接受一个整数作为参数,它表示真值表中的一行,以及一个布尔数组,它存储真值表中该行的值。
这是一个示例真值表
Row| A | B | C |
1 | T | T | T |
2 | T | T | F |
3 | T | F | T |
4 | T | F | F |
5 | F | T | T |
6 | F | T | F |
7 | F | F | T |
8 | F | F | F |
请注意,给定真值表的行数可能比该表多或少,因为可能变量的数量可能会发生变化。
函数原型可能如下所示
getRow(int rowNum, bool boolArr[]);
如果这个函数被调用,例如,as
getRow(3, boolArr[])
它需要返回一个包含以下元素的数组
|1|0|1| (or |T|F|T|)
对我来说困难是因为变量的数量可以改变,因此增加或减少行数。例如,变量列表可以是 A、B、C、D、E 和 F,而不仅仅是 A、B 和 C。
我认为最好的解决方案是编写一个计数到行号的循环,并从本质上改变数组的元素,就像它以二进制计数一样。这样
1st loop iteration, array elements are 0|0|...|0|1|
2nd loop iteration, array elements are 0|0|...|1|0|
我一生都无法弄清楚如何做到这一点,也无法在网络上的其他地方找到解决方案。很抱歉给您带来了困惑,感谢您的帮助
【问题讨论】:
-
公式本身在哪里发挥作用?目标是弄清楚表中给定行的各个变量分配是什么,或者如何解析公式以进行评估?
-
@templatetypedef 最终目标是解析具有任意数量变量的每个可能真值的公式。本质上是检查真值表的每一行,看它是否满足公式。这就是为什么能够分别生成真值表的每一行很重要的原因。例如,如果 a、b 和 c 是变量,我需要检查三个真假的每个组合,看看哪些组合导致整个公式为真。
-
请尝试改进问题陈述。你提到
genTruth没有解释函数应该计算什么然后跳到位移。如果您首先清楚地说明问题然后解释您的方法,这将有助于您的解释。 -
@Pradhan 如果我在这个网站上快速学习了一件事,那就是如何提出一个有效的问题。我编辑的方法更好吗?
-
是的,这好多了!原型需要
getRow(rowNum, boolArr[]);是否有特定原因? C-style arrays decay to pointers 用作函数参数时。如果您在编译时知道数组的大小,使用std::array会容易得多。如果需要在运行时确定大小,可以使用std::vector,原型可以是getRow(rowNum, vector, numVars)。
标签: c++ arrays logic truthtable