求解某个命题公式的真值表和主析取范式和主合取范式 您所在的位置:网站首页 真值表合取范式 求解某个命题公式的真值表和主析取范式和主合取范式

求解某个命题公式的真值表和主析取范式和主合取范式

2024-04-29 19:15| 来源: 网络整理| 查看: 265

一、求解公式

  思路:

  1、首先我们要处理这个公式怎么能被计算机怎样方便的计算,我们人类所熟悉的是中缀表达式,但是计算机需要的不是我们这种,计算起来十分麻烦,因此我们首先要把这个公式转换成后缀表达式(也就是逆波兰式)不会的同学可以去看看我那篇逆波兰表达式。

  2、然后我们要考虑公式符号的处理,因为我们计算机是没有->(蕴含符号) 和 (等价符号) 和 (取非符号的)所以我们要自定义符号,这里我把蕴含符号变成了‘-’号,等价符号变成了‘+’号,取非符号变成了‘ ! ',这样一来计算再次被化简。

  3、我们计算逆波兰表达式要用到栈结构,不了解得话可以去看看我的栈结构的文章啊。

  4、最后是统计主析取范式和主合取范式和真值表

  5、我们只需要遍历当前元素的个数,然后分别跑n个循环,就可以得到他们的真值表和主析取范式。。。。

二、代码实现

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define PII pair 14 #define rep(i,z,n) for(int i = z;i = z; i--) 16 #define ll long long 17 #define db double 18 #define vi vector 19 #define debug(x) cerr '9'){ 28 if(ch == '-') 29 r = -1; 30 ch = getchar(); 31 } 32 while(ch >= '0' && ch 9) write(x / 10); 42 putchar(x % 10 + '0'); 43 } 44 //后缀表达式 45 string expression; 46 int cop(char c) 47 { 48 if(c == '+')//对应等价 49 return 1; 50 else if(c == '-')//对应蕴含 51 return 2; 52 else if(c == '|')//对应吸取 53 return 3; 54 else if(c == '&')//对应合取 55 return 4; 56 else if(c == '!')//对应取非 57 return 5; 58 return 0; 59 } 60 int prio(char c) 61 { 62 if(c == '(')//对应阔号 63 return 0; 64 else if(c == '+')//对应等价 65 return 1; 66 else if(c == '-')//对应蕴含 67 return 2; 68 else if(c == '|')//对应吸取 69 return 3; 70 else if(c == '&')//对应合取 71 return 4; 72 else if(c == '!')//对应取非 73 return 5; 74 return 0; 75 } 76 void aftExpression(string ms) 77 { 78 stack ct;//定义一个ct容器存储运算符 79 for(auto iter = ms.begin();iter != ms.end();iter++){ 80 if(*iter >= 'a' && *iter = 'a' && *it


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有