gpt4 book ai didi

c++ - 如何获得函数的真值表 (( c + ~d ) * b ) * ~( d + a * e )

转载 作者:行者123 更新时间:2023-12-03 07:12:07 24 4
gpt4 key购买 nike

所以我有方程 (( 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;
}

最佳答案

第 1 步:标记化。

enum class TokenType {
bracket, binop, binaryop, var, literal
};
struct Token {
TokenType type;
char value;
};
将字符串转换为 token 的 vector .
您没有使用 literal然而:它是值 0 或 1。稍后您将使用它。
编写漂亮地打印标记 vector 的代码。
第2步:制作一棵简单的树。
struct Tree {
bool is_token=true;
Token token;
std::vector<Tree> tree;
};
更改您的第一个代码以生成包含标记 vector 的树。
编写 pretty-print 代码。测试。
第 3 步:减少树
步骤 3a:括号
现在做一个减少步骤;遍历树的 vector 并生成一个。它会盲目地将不是括号的所有内容复制到输出中。如果它看到 (它会复制所有内容,直到匹配 ) (计数打开和关闭)到子树中,然后将该子树复制到输出中。
需要 "a ( b c )"并使其成为 a然后 b c在子树中。
编写可以漂亮地打印子树的代码。测试。
步骤 3b:嵌套括号
接下来,在您创建的子树上进行递归,因此它的嵌套括号也被放入子树中。
步骤 3c:运营商
接下来,研究运算符(operator)。 ~很简单:它吞​​下 vector 中的下一棵树。如 +绑定(bind)失败者比 * , 对于每个 +制作两个子树;一个用于之前的一切,一个用于之后的一切。然后对 * 执行相同的传递.
在这一切之后,你转身
a+(b+c)*~(d+e)
进入
+  (a , ( * (+ (b, c), ~(+(d,e))))
第4步:替换
映射 std::map将变量映射到一个值。取一棵树的拷贝,然后遍历它,用等于其值的文字替换每个变量。
第 5 步:评估
对于每个运算符,评估子树,然后应用运算符。
结果应该是 0 或 1。
4 和 5 可以从文字表达式开始独立完成。

关于c++ - 如何获得函数的真值表 (( c + ~d ) * b ) * ~( d + a * e ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64509674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com