-------YYC

#include #include #include #include using namespace std; /* *说明: *     用!表示 否定 *     用& 表示 合取 *     用| 表示 析取 *     用- 表示 条件 *     用~ 表示 双条件 */ list> inlist_value_map ;//用于记录所有最初变量的真值组合 list> hqlist_value_map;//用于记录所有符合主合取范式条件的真值组合 list> xqlist_value_map;//用于记录所有符合主析取范式条件的真值组合 int value=0; //string expr; //真值转换函数 void change_val(int & s) { if(0==s) s=1; else s=0; } //处理基本连接词的函数 int deal_cal(int par1,char  par2,int par3) {   // cout<& value_map) { int a; int par_value;//该部分表达式的值 string::size_type l=str.length(); string::const_iterator it = str.begin(); for(;it!=str.end();it++) {  if(*it=='!') { //利用string类型的迭代器实现对String对象的字符的遍历访问。erase string::const_iterator init_it = it+1;//保存!符后的下一个位置 change_val(value_map[*(init_it)]);//转换真值 str.erase(it);//删除否定符号    } } it = str.begin(); par_value=value_map[*it]; if(l==1)//如果该部分只有一个命题则返回该命题的真值 { return par_value; } else { for(;it !=str.end()-1;)   {   // cout<& value_map) { //扫描括号 int sum_kh=0;//括号数 string::const_iterator iter; string::const_iterator addr_kh[50];//用于记录括号的位置 char kind_kh[50];//用于记录括号的类型 for(iter = Expr.begin();iter!=Expr.end();iter++) { if(*iter=='('||*iter==')') { addr_kh[sum_kh]=iter; kind_kh[sum_kh]=*iter; sum_kh++; } } if(0==sum_kh)//如果没有括号 { value=run_unkh_expr(Expr,value_map); return value; } else { int i=0; for(;i<=sum_kh;i++) { if(kind_kh[i]==')')//找到最内级的括号并跳出循环 break; } //取出最内层没有括号的字符串 string in_str = string(addr_kh[i-1]+1,addr_kh[i]); //算出最内层表达式的值 value = run_unkh_expr(in_str,value_map); static char var = '1'; value_map[var]=value;//将括号整体设为一个字符‘1’ string::const_iterator ite =  addr_kh[i-1];//"字符(的位置" //判断(是不是表达式的开头 string::const_iterator init_i; bool is_begin=false; if(ite==Expr.begin()) {is_begin = true; } else { init_i = addr_kh[i-1]-1; } { Expr.erase(ite,addr_kh[i]+1);//删除掉最内层表达式包括括号在内 } //再在删除的地方插入新的字符‘1’ if(is_begin==true) { Expr = var+Expr; } else {Expr.insert(init_i+1,var); } var = var +1; value = run_expr(Expr,value_map);   return value; } } //求主析取范式和主合取范式的函数 //为value_map取到所有不同真值组合的函数 //回溯法 map::iterator it; map in_value_map; void init_value_map(map& value_map) { map::size_type lern = value_map.size();//用于记录变量的个数       if(it == in_value_map.begin()) {   cout<::const_iterator bb= value_map.begin();bb!=value_map.end();bb++) { in_value_map[bb->first]=bb->second; } it = in_value_map.begin();//重新对it赋值  } if(it == in_value_map.end())//如果已经赋值完毕则想队列中加载组合 {     inlist_value_map.push_back(in_value_map);//向队列中加载组合   --it;//如果到底了则只往回走一步,释放最后一步的资源   return ;//跳出函数 }  for(int i=0;i<2;i++)  {   it->second = i;  ++it;  init_value_map(value_map);    }  --it;//每一个子树结束则往回退一步 } int main() {   string expr; map initial_value_map; cout<>expr; string::const_iterator iter = expr.begin(); for(;iter!=expr.end();iter++) { if(*iter!='!'&&*iter!='&'&&*iter!='~'&&*iter!='-'&&*iter!='|'&&*iter!='('&&*iter!=')') { initial_value_map[*iter]=1;//为每一个原子命题默认为真 } } //输出测试组合赋值函数 it = in_value_map.begin(); init_value_map(initial_value_map);     cout<>::iterator ii=inlist_value_map.begin();ii!=inlist_value_map.end();ii++) {   map::iterator ai = (*ii).begin(); if(ai==(*ii).end()) {  cout<::iterator yy = (*ii).begin();yy !=(*ii).end();yy++) { cout<first<second<>::iterator xqchei; xqchei = xqlist_value_map.begin(); if(xqchei ==xqlist_value_map.end()) { cout<>::iterator iit = xqlist_value_map.begin();iit != xqlist_value_map.end();iit++) { cout<::iterator i = (*iit).begin();i !=(*iit).end();i++) {   if(i->first>='0'&&i->first<='9')//不输出表达式中的临时数字字符 { ; } else { if(0==i->second)   { cout<first; map::iterator iii=i; ++iii;   if((iii)==(*iit).end())//如果是最后一位元素则不用再输出合取符   {     ;   }   else   { cout<>::iterator aaa = iit; ++aaa; if(aaa == xqlist_value_map.end())//如果是最后一组组合则不用再输出吸取符 { ; } else { cout<>::iterator hqchei; hqchei = hqlist_value_map.begin(); if(hqchei ==hqlist_value_map.end()) { cout<>::iterator iit = hqlist_value_map.begin();iit != hqlist_value_map.end();iit++) { cout<::iterator i = (*iit).begin();i !=(*iit).end();i++) {   if(i->first>='0'&&i->first<='9')//不输出表达式中的临时数字字符 { ; } else { if(1==i->second)   { cout<first; map::iterator iii=i; ++iii;   if((iii)==(*iit).end())//如果是最后一位元素则不用再输出合取符   {     ;   }   else   { cout<>::iterator aaa = iit; ++aaa; if(aaa == hqlist_value_map.end())//如果是最后一组组合则不用再输出吸取符 { ; } else { cout<

c语言编程实现合取析取,C++实现离散数学求主合取范式和主析取范式相关推荐

  1. c语言如何输出合取析取条件符号,熟悉五个常用联结词合取、析取、条件和双条件的概念,掌握真值表技术。...

    实验目的: 熟悉五个常用联结词合取.析取.条件和双条件的概念,掌握真值表技术. 实验内容与要求 本实验要求从键盘输入两个命题P和Q的真值,求它们的合取.析取.条件和双条件的真值.用C语言或MATLAB ...

  2. C语言编程>第十一周 ② N名学生的成绩已在主函数中放入一个带头结点的链表结构中,a指向链表的头结点。请编写函数fun,它的功能是:找出学生的最高分,由函数返回。

    例题:N名学生的成绩已在主函数中放入一个带头结点的链表结构中,a指向链表的头结点.请编写函数fun,它的功能是:找出学生的最高分,由函数返回. 请勿改动主函数main与其它函数中的任何内容,仅在函数f ...

  3. C语言---集合---合取-析取-异或-条件语句-双条件语句

    设计以下问题的算法: 己知命题p和q的真值,求它们的合取.析取.异或.条件语句和双条件语句的真值.给出程序设计,建议用自定义函数或过程,完成各个算法的程序. 任务难度:易 真值表: 代码如下: #in ...

  4. c语言编程功率谱,有谁会用C编写求功率谱(答案越多越好)

    C语言我不行,Matlab语言行么? 经典功率谱估计 直接法: 直接法又称周期图法,它是把随机序列x(n)的N个观测数据视为一能量有限的序列,直接计算x(n)的离散傅立叶变换,得X(k),然后再取其幅 ...

  5. 八数码c语言编程深度搜索,广度优先搜索解 八数码, 求意见, 求bug/

    已结贴√ 问题点数:100 回复次数:31 广度优先搜索解 , 求意见, 求bug/ 我得去买票了,.... #include #include #include #define NUM 5 type ...

  6. 命题公式的主合取范式C语言,用C或C++编写程序,要求:输入命题公式,给出它的主合取范式和主析取范式....

    共回答了18个问题采纳率:83.3% A-Z + is OR * is AND _ is → # is♁(圆圈里加个+) @ is ⊙ $ is ↑ 命题的"与非" 运算( &qu ...

  7. c语言程序设计 猜数字,猜数字游戏c语言编程,c语言编程 编一个猜数字游戏

    c语言编程 编一个猜数字游戏 #include #include #include #include void main()/*主函数*/ { int a,b,times=0,i,j,guess=0, ...

  8. C语言编程>第十四周 ⑦ 请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。

    例题:请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回. 例如,若有5门课程的成绩是88.92.80.61.5.55:则函数的值为75.30. 请勿改动主函数main与其 ...

  9. C语言编程>第十一周 ⑥ 某学生的记录由学号、5门课程成绩和平均分组成,学号和5门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分,并放在记录的ave成员中。

    例题:某学生的记录由学号.5门课程成绩和平均分组成,学号和5门课程的成绩已在主函数中给出.请编写函数fun,它的功能是:求出该学生的平均分,并放在记录的ave成员中.请自己定义正确的形参.. 例如,若 ...

  10. C语言编程>第十一周 ⑤ 请编写一个函数,用来删除字符串中的所有空格。

    例题:请编写一个函数,用来删除字符串中的所有空格. 例如,输入we l come,则输出为welcome. 请勿改动主函数main与其它函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句. ...

最新文章

  1. Android加速度传感器
  2. 使用 SCons 代替 Makefile 快速构建应用程序
  3. CCF真题 201312-1 出现次数最多的数
  4. 【小白学PyTorch】9.tensor数据结构与存储结构
  5. C语言 链表实现学生管理系统(含文件读写操作)
  6. 经典正则表达式——常用的正则表达式
  7. mac 显示隐藏文件_如何在Mac上显示隐藏文件?苹果mac显示隐藏文件夹方法
  8. PKU 1061 青蛙的约会
  9. C++工作笔记-枚举类型的作用
  10. scheduling java_JAVA定时任务实现的几种方式
  11. JavaScript萌新基础
  12. Labview对mysql查询的数据进行展示
  13. spyder设置显示编码_CNC机床参数的设置及报警解除,赶紧收藏吧!
  14. 腾讯QQ for linux告别pre,开始beta
  15. Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法
  16. Openlayer 切换鼠标样式
  17. Unity 3D模型动画导出为帧序列
  18. 后台管理系统中的antd vue中的问题(动态加载列表a-select-option,后台管理中a-selct-option的回显)
  19. 一个Java菜鸟的学习之道~~~
  20. 考研这么卷,换条路试试​?互联网IT校园招聘信息大全!

热门文章

  1. 通俗易懂的 Vue - Computed 原理(Watcher and Dep)
  2. 编译Libtorrent
  3. android页面监听扫描枪,GitHub - rorine/BarcodeScannerGunMaster: android 扫码枪 内容读取,与拦截editText消费...
  4. 单片机USB2.0高速接口实现方案
  5. NAS组建日记(二):为了玩得自由,还是DIY个NAS机吧
  6. java中怎么判断字符串的长度_java怎么判断字符串的字符串的长度
  7. python爬虫js加密篇—搜狗微信公号文章的爬取
  8. 【文档/键值数据库】文档数据库和键值数据库有什么区别
  9. three.js 视频作为纹理贴图
  10. js基础知识总结大全