离散数学实验之集合的运算源代码

#include
using namespace std;
const int Size=50;//定义数组长度
class Gather
{
private:
char a[Size],b[Size]; //集合A、B
char c[Size],d[Size],e[Size],f[Size],g[Size]; //交、A->B差、B->A差,对称、并、
int m,n,r,s,t,u,v;//集合A与B的元素个数
public:
Gather(); //构造函数,建立集合A、B
void Menu();//选择菜单
void Do();//完成各项操作
void Mix(); //打印交集
void Sum();//打印并集
void Chaji();//打印差集
void Duichen();//打印对称差
void Dika(); //求并打印笛卡尔乘积
void Putall(); //打印所有运算结果
void Putfirst(); //打印A、B元素
};

void Gather::Mix() //打印交集
{
if(t==0)
{
cout<<"交集为空!"<return;
}
int i;
cout<<"两个集合的交集是:"<for(i=0;icout<cout<}

void Gather::Sum()//打印并集
{
if(u==0)
{
cout<<"并集为空!"<return ;
}
int i;
cout<<"两个集合的并集是:"<for(i=0;icout<cout<}

void Gather::Chaji()//打印差集
{
int i;
if(r!=0)
{
cout<<"A对B的差集A-B是:"<for(i=0;icout<cout<}
else
cout<<"A对B的差集为空!"<if(s!=0)
{
cout<<"B对A的差集B-A是:"<for(i=0;icout<cout<}
else
cout<<"B对A的差集为空!"<}

void Gather::Duichen()//打印对称差
{
if(v==0)
{
cout<<"对称差集为空!"<return ;
}
int i;
cout<<"集合A与集合B的对称差是:"<for(i=0;icout<cout<}

void Gather::Putall() //打印所有运算结果
{
Mix();
Sum();
Chaji();
Duichen();
Dika();
}

void Gather::Putfirst()
{
int i;
cout<<"A中元素为:"<for(i=0;icout<cout<for(i=0;icout<cout<}

Gather::Gather()//构造函数,对象初始化
{
int i;
r=s=t=u=v=0;
cout<<"请输入A集合的元素个数:"<cin>>m;
cout<<"请输入集合A:"<for(i=0;icin>>a[i];
cout<<"请输入B集合的元素个数:"<cin>>n;
cout<<"请输入集合B:"<for(i=0;icin>>b[i];
}

void Gather::Menu()
{
cout<cout<<"** I:交集 **"<cout<<"** U:并集 **"<cout<<"** C:差集 **"<cout<<"** D:对称差 **"<cout<<"** K:笛卡尔乘积 **"<cout<<"** A:输出所有结果 **"<cout<<"** P:打印A和B **"<cout<<"** E:退出 **"<cout<<"--------------------------"<}

void Gather::Do()//求解操作
{
int i,j,k,s1=0,flog;
char x;
for(i=0;ifor(j=0;j

;j++)//B
if(a[i]==b[j])//求交集元素
{
flog=0;
for(k=0;kif(a[i]==c[k])
flog=1;
if(flog==0)
c[s1++]=a[i];
break;
}
t=s1;//传出 交集 元素个数 ok
k=0; //-------求并集g[]
for(i=0;i{
flog=0;
for(j=0;jif(a[i]==g[j])//删除A中相同元素
flog=1;
if(flog==0)
g[k++]=a[i];//将集合A中元素弹入集合g[]
}
for(i=0;i{
flog=0;
for(j=0;jif(b[i]==g[j])//并删除B中相同元素
{
flog=1;
break;
}
if(flog==0)
g[k++]=b[i];//将集合B中元素弹入集合g[]
}
for(i=0;ifor(j=i+1;jif(g[i]>g[j])
{
x=g[i];
g[i]=g[j];
g[j]=x;
}
u=k;//传出 并集 元素个数
k=0;//--------------求差集
int p,q;//控制差集相同元素删除
for(i=0;i{
flog=0;
for(j=0;jif(a[i]==b[j])////A对B的差集d[]
{
flog=1;
break;
}
if(flog==0)
{
q=0;
for(p=0;pif(d[p]==a[i])//删除相同元素
q=1;
if(q!=1)
d[k++]=a[i];
}
}
r=k;////传出 A对B的差集 元素个数r
k=0;
for(i=0;i{
flog=0;
for(j=0;jif(b[i]==a[j])//B对A的差集e[]
{
flog=1;
break;
}
if(flog==0)
{
q=0;
for(p=0;pif(e[p]==b[i])//删除相同元素
q=1;
if(q==0) e[k++]=b[i];
}
}
s=k;////传出 B对A的差集 元素个数s
k=0;//------求对称差f[]
for(i=0;if[k++]=d[i];//A->B
for(j=0;jf[k++]=e[j];//B->A
v=k;//传出 对称差 元素个数 ok
for(i=0;ifor(j=i+1;jif(f[i]>f[j])
{
x=f[i];
f[i]=f[j];
f[j]=x;
}
}

void Gather::Dika()//笛卡尔乘积
{
int i,j;
if(m==0||n==0)
{
cout<<"笛卡尔乘积为空"<return ;
}
cout<<"两个集合的笛卡尔乘积:"<cout<<"A*B:"<for(i=0;i{
for(j=0;jcout<<"<"<'<<' ';
cout<}
cout<for(i=0;i{
for(j=0;jcout<<"<"<'<<' ';
cout<}
}

int main() //主函数
{
Gather g;//Gather集合对象
char c;
g.Do(); //具体操作
while(c!='E') //输入E退出系统
{
g.Menu(); //显示菜单
cout<<"请输入您的选项:";
cin>>c; //输入选项
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、B
g.Putfirst();
break;
default:
break;
}
}
return 0;
}

相关文档
最新文档