您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > 离散数学实验之集合的运算源代码
#includeiostreamusingnamespacestd;constintSize=50;//定义数组长度classGather{private:chara[Size],b[Size];//集合A、Bcharc[Size],d[Size],e[Size],f[Size],g[Size];//交、A-B差、B-A差,对称、并、intm,n,r,s,t,u,v;//集合A与B的元素个数public:Gather();//构造函数,建立集合A、BvoidMenu();//选择菜单voidDo();//完成各项操作voidMix();//打印交集voidSum();//打印并集voidChaji();//打印差集voidDuichen();//打印对称差voidDika();//求并打印笛卡尔乘积voidPutall();//打印所有运算结果voidPutfirst();//打印A、B元素};voidGather::Mix()//打印交集{if(t==0){cout交集为空!endl;return;}inti;cout两个集合的交集是:endl;for(i=0;it;i++)coutc[i];coutendl;}voidGather::Sum()//打印并集{if(u==0){cout并集为空!endl;return;}inti;cout两个集合的并集是:endl;for(i=0;iu;i++)coutg[i]'';coutendl;}voidGather::Chaji()//打印差集{inti;if(r!=0){coutA对B的差集A-B是:endl;for(i=0;ir;i++)coutd[i]'';coutendl;}elsecoutA对B的差集为空!endl;if(s!=0){coutB对A的差集B-A是:endl;for(i=0;is;i++)coute[i]'';coutendl;}elsecoutB对A的差集为空!endl;}voidGather::Duichen()//打印对称差{if(v==0){cout对称差集为空!endl;return;}inti;cout集合A与集合B的对称差是:endl;for(i=0;iv;i++)coutf[i]'';coutendl;}voidGather::Putall()//打印所有运算结果{Mix();Sum();Chaji();Duichen();Dika();}voidGather::Putfirst(){inti;coutA中元素为:endl;for(i=0;im;i++)couta[i]'';coutendlB中元素为:endl;for(i=0;in;i++)coutb[i]'';coutendl;}Gather::Gather()//构造函数,对象初始化{inti;r=s=t=u=v=0;cout请输入A集合的元素个数:endl;cinm;cout请输入集合A:endl;for(i=0;im;i++)cina[i];cout请输入B集合的元素个数:endl;cinn;cout请输入集合B:endl;for(i=0;in;i++)cinb[i];}voidGather::Menu(){coutendl--------------------------endl;cout**I:交集**endl;cout**U:并集**endl;cout**C:差集**endl;cout**D:对称差**endl;cout**K:笛卡尔乘积**endl;cout**A:输出所有结果**endl;cout**P:打印A和B**endl;cout**E:退出**endl;cout--------------------------endl;}voidGather::Do()//求解操作{inti,j,k,s1=0,flog;charx;for(i=0;im;i++)//Afor(j=0;jn;j++)//Bif(a[i]==b[j])//求交集元素{flog=0;for(k=0;ks1;k++)//删除交集中相同元素if(a[i]==c[k])flog=1;if(flog==0)c[s1++]=a[i];break;}t=s1;//传出交集元素个数okk=0;//-------求并集g[]for(i=0;im;i++){flog=0;for(j=0;jk;j++)if(a[i]==g[j])//删除A中相同元素flog=1;if(flog==0)g[k++]=a[i];//将集合A中元素弹入集合g[]}for(i=0;in;i++){flog=0;for(j=0;jk;j++)if(b[i]==g[j])//并删除B中相同元素{flog=1;break;}if(flog==0)g[k++]=b[i];//将集合B中元素弹入集合g[]}for(i=0;ik-1;i++)//对并集从小到大排序for(j=i+1;jk;j++)if(g[i]g[j]){x=g[i];g[i]=g[j];g[j]=x;}u=k;//传出并集元素个数k=0;//--------------求差集intp,q;//控制差集相同元素删除for(i=0;im;i++){flog=0;for(j=0;jn;j++)if(a[i]==b[j])////A对B的差集d[]{flog=1;break;}if(flog==0){q=0;for(p=0;pk;p++)if(d[p]==a[i])//删除相同元素q=1;if(q!=1)d[k++]=a[i];}}r=k;////传出A对B的差集元素个数rk=0;for(i=0;in;i++){flog=0;for(j=0;jm;j++)if(b[i]==a[j])//B对A的差集e[]{flog=1;break;}if(flog==0){q=0;for(p=0;pk;p++)if(e[p]==b[i])//删除相同元素q=1;if(q==0)e[k++]=b[i];}}s=k;////传出B对A的差集元素个数sk=0;//------求对称差f[]for(i=0;ir;i++)f[k++]=d[i];//A-Bfor(j=0;js;j++)f[k++]=e[j];//B-Av=k;//传出对称差元素个数okfor(i=0;iv-1;i++)//对对称差f[]从小到大排序for(j=i+1;jv;j++)if(f[i]f[j]){x=f[i];f[i]=f[j];f[j]=x;}}voidGather::Dika()//笛卡尔乘积{inti,j;if(m==0||n==0){cout笛卡尔乘积为空endl;return;}cout两个集合的笛卡尔乘积:endl;coutA*B:endl;for(i=0;im;i++){for(j=0;jn;j++)couta[i]','b[j]'''';coutendl;}coutendlB*A:endl;for(i=0;in;i++){for(j=0;jm;j++)coutb[i]','a[j]'''';coutendl;}}intmain()//主函数{Gatherg;//Gather集合对象charc;g.Do();//具体操作while(c!='E')//输入E退出系统{g.Menu();//显示菜单cout请输入您的选项:;cinc;//输入选项switch(c){case'I'://求交集g.Mix();break;case'U'://求并集g.Sum();break;case'C'://求差集g.Chaji();break;case'D'://求对称差g.Duichen();break;case'K'://求笛卡尔乘积g.Dika();break;case'A'://输出所有运算结果g.Putall();break;case'P'://打印A、Bg.Putfirst();break;default:break;}}return0;}
本文标题:离散数学实验之集合的运算源代码
链接地址:https://www.777doc.com/doc-4696928 .html