湖南大学离散数学程序设计题.docx
- 文档编号:5618896
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:61
- 大小:276.11KB
湖南大学离散数学程序设计题.docx
《湖南大学离散数学程序设计题.docx》由会员分享,可在线阅读,更多相关《湖南大学离散数学程序设计题.docx(61页珍藏版)》请在冰豆网上搜索。
湖南大学离散数学程序设计题
程序设计题2010年
语言不限,显示方式中的表格线可以不出现,但要显示为表格的样子,到底做哪道题,在上机时由老师宣布或抽签决定。
1、自动生成真值表
2、判断两个公式是否等值
3、生成主析取、主合取范式
4、判断一个公式是否合法
已给出了基本方法,判断过程中也给出判断过程。
5、集合运算
6、关系矩阵与关系的复合
说明二个序偶之间用分号(;)分隔。
“关系一的矩阵”是指给出关系一的关系矩阵。
直接利用序偶进行复合,得到其关系的复合
7、求关系的自反与对称闭包
关系的自反闭包
关系的对称闭包
8、利用矩阵求其关系的复合与传递闭包
9、判断运算是否可结合
10、判断运算一对运算二是否可分分配
11、判断两个代数是否同构
//1.1自动生成真值表
#include
#include
usingnamespacestd;
classGongshi{//得到任意公式真值表的类
private:
stringyuanshimingti;//用来保存输入的原始公式。
stringguodu;//过渡用的字符串。
stringzuijian;//保存命题变元的字符串。
intnum;//原子命题个数
public:
Gongshi(stringa)//构造函数
{
yuanshimingti=a;
guodu="00000000000000000000";//初始化为0000....为了更好的储存数据
zuijian="00000000000000000000";
huoquzimu();//调用设置函数
}
voidhuoquzimu()//得到原子命题的函数
{
intk=0;
for(inti=0;yuanshimingti[i]!
=0;i++)
if((yuanshimingti[i]>='a')&&(yuanshimingti[i]<='z')){//原子命题必须是小写字母
guodu[k]=yuanshimingti[i];
k++;
}
guodu[k]='\0';//字符串结束符
setguodu();//调用函数,去掉重复的
}
voidsetguodu()//化简所得到的命题变元,去掉重复的。
{
intk=1;
zuijian[0]=guodu[0];
for(inti=1;guodu[i]!
=0;i++){
if(jianyan(guodu[i],i)){
zuijian[k]=guodu[i];
k++;
}
}
guodu[k]='\0';
num=k;//记下命题变元的个数
}
booljianyan(chara,intn)//检验是否重复的子函数
{
for(inti=0;i if(a==zuijian[i]) return0; } return1; } voidoperator1()//主操作函数1 { for(inti=0;i cout< cout< inta=1;//用来储存一共有多少种解释。 for(i=0;i a=a*2; //分2^num种情况,来解释真值表 intb=0,c[10]={0,0,0,0,0,0,0,0,0,0}; for(i=0;i intd=b; for(intj=0;j //将十进制转化为二进制 c[j]=d%2; d=(int)d/2; } for(j=num-1;j>-1;j--){ cout< } b++; stringcc="0000000000"; for(j=0;j if(c[j]==1) cc[j]='1'; else cc[j]='0'; } stringaa; aa=yuanshimingti; //通过双重循环,用0/1来替代命题变员 for(intk=0;k for(intj=0;aa[j]! =0;j++){//原始公式 if(aa[j]==zuijian[k]) aa[j]=cc[num-k-1]; } } cout< cout<<"\n"; } } charoperator2(stringchushi)//操作函数2,得到某种解释下真值表的值,主要思路: 从前到后,从外到里! { //第一步,先找到和计算出最外面的括号! inta,b=0,k=0; for(inti=0;chushi[i-1]! =')'&&chushi[i]! =0;i++){ if(chushi[i]==')') b=i; } for(i=0;chushi[i]! =')'&&chushi[i]! =0;i++){ if(chushi[i]=='(') a=i; } if(b! =0){ for(i=a+1;i guodu[k]=chushi[i]; k++; } guodu[k]='\0'; chart; t=operator2(guodu); chushi[a]=t; intz=a+1; for(k=b+1;chushi[k-1]! =0;k++){ chushi[z]=chushi[k]; z++; } returnoperator2(chushi); } //第二步再去掉否定 for(i=0;chushi[i]! =0;i++){ if(chushi[i]=='! '){ if(chushi[i+1]=='1') chushi[i+1]='0'; else chushi[i+1]='1'; intz=i; for(k=z+1;chushi[k-1]! =0;k++){ chushi[z]=chushi[k]; z++; } } } //第三步直接计算真值 charc='1'; for(i=0;chushi[i]! =0;i++){ if(chushi[i]=='+'){ if((chushi[i-1]=='1')||(chushi[i+1]=='1')) chushi[i+1]='1'; else chushi[i+1]='0'; } if(chushi[i]=='^'){ if((chushi[i-1]=='1')&&(chushi[i+1]=='1')) chushi[i+1]='1'; else chushi[i+1]='0'; } if(chushi[i+1]! =0) c=chushi[i+1]; } returnc; } }; intmain() { stringa1;//用来接收输入的字符串 cout<<"(合取用^代替,析取用+代替,命题变元用小写字母)"< cout<<"请输入表达式: "; cin>>a1; cout< Gongshigongshi1(a1);//初始化一个类的对象. gongshi1.operator1();//调用该类的主操作函数,实现目的. return0; } //1.2判断两个公式是否等值 #include #include usingnamespacestd; classGongshi{//得到任意公式真值表的类 private: stringyuanshimingti;//用来保存输入的原始公式1。 stringyuanshimingti2;//用来保存输入的原始公式2。 stringguodu;//过渡用的字符串。 stringzuijian;//保存命题变元的字符串。 stringguodu2;//过渡用的字符串2。 stringzuijian2;//保存命题变元的字符串2。 intnum;//公式1原子命题个数 intnum2;//公式2原子命题个数 public: Gongshi(stringa,stringb)//构造函数 { yuanshimingti=a; yuanshimingti2=b; guodu="00000000000000000000";//初始化为0000....为了更好的储存数据 zuijian="00000000000000000000"; guodu2="00000000000000000000"; zuijian2="00000000000000000000"; huoquzimu1();//调用设置函数设置公式一 huoquzimu2();//调用设置函数设置公式二 } //公式一 voidhuoquzimu1()//得到原子命题的函数 { intk=0; for(inti=0;yuanshimingti[i]! =0;i++) if((yuanshimingti[i]>='a')&&(yuanshimingti[i]<='z')){//原子命题必须是小写字母 guodu[k]=yuanshimingti[i]; k++; } guodu[k]='\0';//字符串结束符 setguodu();//调用函数,去掉重复的 } voidsetguodu()//化简所得到的命题变元,去掉重复的。 { intk=1; zuijian[0]=guodu[0]; for(inti=1;guodu[i]! =0;i++){ if(jianyan(guodu[i],i)){ zuijian[k]=guodu[i]; k++; } } guodu[k]='\0'; num=k;//记下命题变元的个数 } //公式二 voidhuoquzimu2()//得到原子命题的函数 { intk=0; for(inti=0;yuanshimingti2[i]! =0;i++) if((yuanshimingti2[i]>='a')&&(yuanshimingti2[i]<='z')){//原子命题必须是小写字母 guodu2[k]=yuanshimingti2[i]; k++; } guodu2[k]='\0';//字符串结束符 setguodu2();//调用函数,去掉重复的 } voidsetguodu2()//化简所得到的命题变元,去掉重复的。 { intk=1; zuijian2[0]=guodu2[0]; for(inti=1;guodu2[i]! =0;i++){ if(jianyan(guodu2[i],i)){ zuijian2[k]=guodu2[i]; k++; } } guodu2[k]='\0'; num2=k;//记下命题变元的个数 } booljianyan(chara,intn)//检验是否重复的子函数 {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 湖南大学 离散数学 程序设计