【发布时间】:2021-02-07 02:09:05
【问题描述】:
所以我有等式 (( c + ~d ) * b ) * ~( d + a * e ) 我试图生成一个真值表,但我不确定我什至如何开始程序根据真值表计算变量是否应该等于真或假。关于如何做到这一点的任何建议?提前谢谢你。
#include<iostream>
using namespace std;
bool checkBoolTF(int a){
bool TF;
if(a == 0){
TF = false;
}
else{
TF = true;
}
return TF;
}
int main()
{
int a,b,c,d,e;
bool aBool, bBool, cBool, dBool, eBool;
string equation = "(( c + ~d ) * b ) * ~( d + a * e )";
bool equationTF;
//LOOP TO TRUTH TABLE - FINAL VALUES
cout << "----------------------------------------------------------------------" << endl;
cout << "| a | b | c | d | e | " << equation << " |" << endl;
cout << "----------------------------------------------------------------------" << endl;
for(a=0;a<=1;a++){
checkBoolTF(a);
for(b=0;b<=1;b++){
checkBoolTF(b);
for(c=0;c<=1;c++){
checkBoolTF(c);
for(d=0;d<=1;d++){
checkBoolTF(d);
for(e=0;e<=1;e++){
checkBoolTF(e);
cout << "| " << a << " | " << b << " | " << c << " | " << d << " | " << e << " | " << equationTF << " |" << endl;
cout << "----------------------------------------------------------------------" << endl;
}
}
}
}
}
return 0;
}
【问题讨论】:
-
你必须解析字符串
(( c + ~d ) * b ) * ~( d + a * e )吗?或者是否允许通过一些转换对公式进行硬编码以将其用作 C++ 表达式? -
它必须被解析。可悲的是不能硬编码。
-
+ 和 * 分别表示 OR 和 AND 吗?
-
是的@Eugene
-
@RonBaker 是的,解析树比数学表达式所需的要复杂得多。查找调车场算法。它提供了一种将表达式从中缀表示法(我们在输入字符串中看到的)转换为一种后缀表示法的方法,例如
c d ~ + b * d a e * + ~ *(如果我输入正确,它与您指定的表达式相同),其中后缀输入的形式更容易评估
标签: c++ truthtable