离散数学第三次实验作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*******wuyu*******/
#include
#include
#include
using namespace std;
const int N = 100;
struct R{
char a;
char b;
};
int getXY(char s1[],char X[])
{
int i=0,j=0;
for(;i < strlen(s1);i += 2,j ++)
{
X[j] = s1[i];
}
return j;
}
void outputXY(char *px,char *py,int m,int n)
{
printf("X*Y:\n");
for(int i = 0;i < m;i ++)
{
for(int j = 0;j < n;j ++)
{
printf("<%c,%c> ",*(px+i),*(py+j));
}
printf("\n");
}
}
void outputXX(char *px,int m)
{
int i,j;
printf("X*X: \n");
for(i = 0;i < m;i ++)
{
for(j = 0;j < m;j ++)
{
printf("<%c,%c> ",*(px+i), *(px+j) );
}
printf("\n");
}
}
void outputR(R *pr,int rn)
{
int i;
printf("关系R:\n");
for(i = 0;i < rn;i ++)
{
printf(" <%c,%c> ",pr[i].a,pr[i].b);
}
printf("\n");
}
void zf(R r[],int rn,char X[],int xl)
{
int i,j;
int k = 0;
for(i = 0;i < xl;i ++)
{
for(j = 0;j < rn;j ++)
{
if(r[j].a == X[i] && r[j].b == X[i])
{
k ++;
break;
}
}
}
if(k == xl)
printf("自反 ");
else
printf("不自反 ");
}
int fzf(R r[],int rn)
{
int i;
for(i = 0;i < rn;i ++)
{
if(r[i].a == r[i].b)
{
printf("不反自反 ");
return 0;
}
}
printf("反自反 ");
return 0;
}
int dc(R r[],int rn)
{
int i,j,l;
for(i = 0;i < rn;i ++)
{
l = 0;
for(j = 0;j < rn;j ++)
{
if(r[i].a == r[j].b &&r[i].b == r[j].a)
{
l = 1;
}
}
if(l == 0)
{
printf("不对称 ");
return 0;
}
}
printf("对称 ");
return 0;
}
int fdc(R r[],int rn)
{
int i,j;
for(i = 0;i < rn;i ++)
{
int m = 0;
for(j = 0;j < rn;j ++)
{
if(j == i)
{
continue;
}
if(r[i].a == r[j].b &&r[i].b == r[j].a)
{
m = 1;
}
}
if(m == 1)
{
printf("不反对称 ");
return 0;
}
}
printf("反对称 ");
return 0;
}
int main()
{
char X[N],Y[N],s1[N*2],s2[N*2];
int xl,yl,rn,rn1;
int i,j;
R r[N];
printf("输入集合X: ");//(元素间以逗号间隔)
gets(s1);
printf("输入集合Y: ");//(元素间以逗号间隔)
gets(s2);
xl = getXY(s1,X);
yl = getXY(s2,Y);
outputXY(X,Y,xl,yl);
outputXX(X,xl);
printf("输入要判断的关系R中所包含的序偶个数(X*X中的): ");
scanf("%d",&rn);
j = xl * xl;
printf("输入%d个序偶序号",rn);
printf("\(从1到%d\):\n",j);
for(i = 0;i < rn;i++)
{
scanf("%d",&rn1);
int m = rn1 / xl;
if(rn1 % xl == 0)
{
m--;
}
int n = rn1 % xl;
if(rn1 % xl == 0)
{
n=xl;
}
n--;
r[i].a = X[m] ;
r[i].b = X[n] ;
}
outputR(r,rn);
printf("R的性质:\n");
zf(r,rn,X,xl);
fzf(r,rn);
dc(r,rn);
fdc(r,rn);
return 0;
}