《数据结构c语言》重言式判定参考了别人的代码.docx
- 文档编号:1618325
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:7
- 大小:16.76KB
《数据结构c语言》重言式判定参考了别人的代码.docx
《《数据结构c语言》重言式判定参考了别人的代码.docx》由会员分享,可在线阅读,更多相关《《数据结构c语言》重言式判定参考了别人的代码.docx(7页珍藏版)》请在冰豆网上搜索。
《数据结构c语言》重言式判定参考了别人的代码
《数据结构c语言》重言式判定------参考了别人的代码
重言式判定------参考了别人的代码。
。
2011-05-1117:
19122人阅读评论(0)收藏举报【重言式判别】
[问题描述]
一个逻辑表达式如果对于其变元的任一种取值均为真,则成为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式,然而,更多的情况下,既非重言式,也非矛盾式。
试写一个程序,通过真值表判别一个逻辑表达式属于上述
哪一类。
,
[基本要求]
(1)逻辑表达式从终端输入,长度不超过一行。
逻辑运算符包括“,”、“,”和“,”,分别表示或、与和非,运算优先程度递增,但可有括号改变,即括号内的运算优先。
逻辑变元为大写字母。
表达式中任何地方都可以含有多个
空格符。
(2)若是重言式或矛盾式,可以只显示“TrueForever”或“FalseForever”,否则显示“Satisfactible”以及变量名序列,与用户交互。
若用
户对表达式变元取定一组值,程序就求出并显示逻辑表达式的值。
[测试数据]
(1)(A,,A),(B|~B)
(2)(A&,A),C
(3)A|B|C|D|E,,A
[实现提示]
(1)识别逻辑表达式的符号形式并建立二叉树可以有两种策略:
自底向上的算符
优先法和自顶向下分割,先序遍历建立二叉树的方法。
(2)可设表达式中逻辑变量数不超过20。
真值的产生可以通过在一维数组上维
护一个“软计数器”实现,用递归算法实现更简单。
[cpp]viewplaincopyprint?
1.#include
2.usingnamespacestd;
3.structArr
4.{
5.charletter;
6.intweight;
7.};
8.classCys
9.{
10.public:
11.Cys();
12.voidGetTautology();//输入表达式
13.int_CreateT(int,int);//虚拟创建二叉树
14.intFindMin(int,int);//找到weight最小的
15.intcount();//计算可满足式的值
16.void_recursion(Arr*_arr,inti);//递归,穷举
17.voidrecursion();//使用接口函数18.voidPrint();//输出结果19.~Cys();//析构释放空间
20.private:
21.intnum;
22.Arr*array;23.Arr_arr[20];//存放字母
24.int_arrNum;
25.inttrueforever;
26.intfalseforever;
27.};
28.
29.Cys:
:
Cys()
30.{
31.trueforever=0;
32.falseforever=0;
33.array=newArr[20];34.for(inti=0;i<20;i++){35.array[i].weight-1;36.array[i].letter='0';
37.}
38._arrNum=0;
39.num=0;
40.}
41.voidCys:
:
GetTautology()
42.{
43.inthas[27]={0};
44.intweight=0;
45.charch;
46.cout<<"请输入一个逻辑表达式,以#结束"< 47.while(cin>>ch&&ch! ='#') 48.{ 49. 50. 51.if(ch=='') 52.continue; 53. 54.switch(ch) 55.{ 56.case'(': 57.weight+=4; 58.break; 59.case')': 60.weight-=4; 61.break; 62.case'&': 63.array[num].letter=ch; 64.array[num++].weight=weight+2; 65.break; 66.case'|': 67.array[num].letter=ch; 68.array[num++].weight=weight+1; 69.break; 70.case'~': 71.array[num].letter=ch; 72.array[num++].weight=weight+3; 73.break; 74.default: 75.array[num].letter=ch;76.if(! has[array[num].letter-'A']){ 77._arr[_arrNum++].letter=array[num].letter;78.has[array[num].letter-'A']=1; 79.}80.array[num++].weight=0; 81.break; 82.} 83. 84.} 85.} 86.intCys: : FindMin(intlow,inthigh) 87.{ 88.intmin=low; 89.while(! array[min].weight) 90.min++; 91. 92.if(min 93.for(inti=min;i 94.if(array[i].weight&&array[i].weight 95.min=i; 96.returnmin; 97.} 98.else 99.return0; 100. 101.} 102. 103.intCys: : _CreateT(intlow,inthigh) 104.{ 105.intMin=0; 106.//cout<<"create"< 107.if(low>high) 108.return1; 109.elseif(low==high) 110.{ 111.//cout<<"letter"< 112.inti; 113.for(i=0;_arr[i].letter! =array[low].letter;i++);//从array[]中寻找与_arr[]中相同的字母 114.return_arr[i].weight;//返回它的weight(1或0) 115.} 116.else{ 117.Min=FindMin(low,high);118.//cout<<"array[Min].letter: "< 119.switch(array[Min].letter){ 120.case'&': return(_CreateT(low,Min-1)&&_CreateT(Min+1,high)); 121.break; 122.case'|': return(_CreateT(low,Min-1)||_CreateT(Min+1,high)); 123.break; 124.case'~': return(! _CreateT(Min+1,high)); 125.break; 126.} 127.} 128.} 129.intCys: : count()//计算可满足式的值 130.{ 131.inti=0; 132.cout<<"请给字母赋值"< 133.while(_arrNum--){134.cout<<_arr[i].letter;135.cin>>_arr[i++].weight; 136.} 137.if(_CreateT(0,num-1)) 138.trueforever++; 139.else 140.falseforever++; 141. 142.} 143. 144.voidCys: : _recursion(Arr_arr[],inti)//递归调用 145.{ 146.if(i<_arrNum){147._arr[i].weight=0;148.//cout<<"0"< 153.} 154.else 155.if(! trueforever||! falseforever) 156.{ 157.switch(_CreateT(0,num-1)) 158.{ 159.case1: 160.//cout<<"trueforever++;"< 161.trueforever++; 162.break; 163.case0: 164.//cout<<"falseforever++;"< 165.falseforever++; 166.break; 167.default: 168.break; 169.} 170.} 171.} 172. 173.voidCys: : Print() 174.{if(trueforever&&falseforever)//如果真假同时存在就判断它为satisfactible. 175.cout<<"satisfactible."< trueforever)177.cout<<"falseforever."< 178.else 179.cout<<"trueforever."< 180.} 181. 182.voidCys: : recursion() 183.{ 184._recursion(_arr,0); 185.} 186. 187.Cys: : ~Cys() 188.{ 189.delete[]array; 190.} 191. 192.intmain() 193.{ 194.cout<<"-------------------重言式判别--------------------"< 195.Cyscys; 196.charc; 197.cys.GetTautology(); 198.cout<<"计算机穷举请按't'or用户赋值请按'n'"< 199.ci
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构c语言 数据结构 语言 重言式 判定 参考 别人 代码