《离散数学实验报告(一).doc》由会员分享,可在线阅读,更多相关《离散数学实验报告(一).doc(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一、实验内容:构造任意合式公式的真值表二、实验源码:#include #includethesis.hint main()Thesis a30;char x=1;int i=0,N;cout请输入命题变元(不超过30个)(输入0结束输入):x; if(i19)coutError:变元个数太多!endl;break;if(x!=0)ai.inname(x);i+;N=i;int M;M=N;string A;cout请输入命题公式( 否定:!,合取:&,析取:| )A;coutA的真值表为:endl;for(int j=0;jM;j+)coutchar(aj.getvalue() ;cout真值
2、endl;assignment(A,N,M,&a0);system(pause);return 0;#includethesis.h头文件#ifndef THESIS_H#define THESIS_H#include#include#includeusing namespace std;class Thesis /命题类 int value;char name; /value:命题的真值(0/1) name:命题名public:Thesis()value=2;name=A;friend Thesis operator !(Thesis &q) q.invalue(1-q.getvalue()
3、; return q; /重载逻辑运算符 friend Thesis operator &(Thesis &p,Thesis &q)p.invalue(p.getvalue()+q.getvalue()/2); return p;friend Thesis operator |(Thesis &p,Thesis &q) if(p.getvalue()+q.getvalue()0) p.invalue(1); else p.invalue(0); return p;friend Thesis operator (Thesis &p,Thesis &q)if(p.getvalue()=1&q.ge
4、tvalue()=0) p.invalue(0); else p.invalue(1); return p;friend Thesis operator (Thesis &p,Thesis &q) if(p.getvalue()=q.getvalue() p.invalue(1); else p.invalue(0); return p;void invalue(int x)value=x; /输入valuevoid inname(char x)name=x; /输入nameint getvalue()return value; /获取真值int getname()return name; /
5、获取命题名;void assignment(string A,int N,int M,Thesis a); /声明函数 int bds(string A,int N,Thesis a);int run(string A,int &i,int L,int N,Thesis a);void assignment(string A,int N,int M,Thesis a)/命题赋值并计算真值for(int j=0;j1)assignment(A,N-1,M,&a0);elsefor(int i=0;iM;i+)coutai.getvalue() ;coutbds(A,M,&a0),; /定义运算符
6、号集合 int L;int i=0;L=strlen(&A0); /表达式长度while(iL)if(Ai=() int k=1;for(int j=i+2;jL;j+)if(k!=0)if(Aj=()k+;if(Aj=)k-;if(k=0)int l=j-i-1;char *p=new charl+1;string B;for(int m=0;ml;m+)pm=Ai+1+m;pl=0;B=p;delete p;Temp.invalue(bds(B,N,&a0);if(i=0)answer.invalue(Temp.getvalue();i=j+1;break;elseif(Ai=!) /否定
7、的计算Temp.invalue(run(A,i,L,N,&a0);answer=!Temp;i+;continue;else if(Ai=|)Temp.invalue(run(A,i,L,N,&a0);answer=answer|Temp;i+;continue;else if(Ai=&)Temp.invalue(run(A,i,L,N,&a0);answer=answer&Temp;i+;continue;else if(Ai=)Temp.invalue(run(A,i,L,N,&a0);answer=answer)Temp.invalue(run(A,i,L,N,&a0);answer=a
8、nswerTemp;i+;continue;elsefor(int j=0;jN;j+)if(Ai=char(aj.getname()Temp.invalue(aj.getvalue();if(i=0)answer.invalue(Temp.getvalue();i+;break;return answer.getvalue();int run(string A,int &i,int L,int N,Thesis a)Thesis Temp;if(Ai+1=()int k=1;for(int j=i+2;jL;j+)if(k!=0)if(Aj=()k+;if(Aj=)k-;if(k=0)int l=j-i-1;char *p=new charl+1;string B;for(int m=0;ml-1;m+)pm=Ai+2+m;pl-1=0;B=p;delete p;Temp.invalue(bds(B,N,&a0);i=i+j;break;elseint j=0;while(jL)if(Ai+1=char(aj.getname()i+;Temp=aj;break;j+;return Temp.getvalue();#endif三、运行结果