当前位置:文档之家› 离散数学2集合论

离散数学2集合论

for(i=0;B[i]!='\0';i++)
{
flag=1;
for(j=0;A[j]!='\0';j++)
if(A[j]==B[i]){flag=0;break;}
if(flag)S[k++]=B[i];
}
S[k]='\0';
Array_To_Set(S,C);
printf("A∪B=%s\n",C);
for(m=1;m<p;m++)
{
for(j=2;j<=n;j++)if(C[j-1]<=C[j])i=j;
for(k=i;k<=n;k++)if(C[i-1]<C[k])j=k;
swap(C[i-1],C[j]);
swapc(A,i-2,j-1);
for(k=0;k<=n;k++)
if(i+k<n-k)
南京工程学院
实验报告
课程名称离散数学
实验项目名称集合论
实验学生班级K网络工程121
实验学生姓名王云峰
学 号*********
实验时间11月8日
实验地点信息楼
实验成绩评定
指导教师签字年月日
一、实验目的和要求
集合论是一切数学的基础,也是计算机科学不可或缺的,在数据结构、数据库理论、开关理论、自动机理论和可计算理论等领域都有广泛的应用。集合的运算规则是集合论中的重要内容。通过该组实验,目的是让学生更加深刻地理解集合的概念和性质,并掌握集合的运算规则等。
}
}
}
五、实验结果及分析(计算过程与结果、数据曲线、图表等)
求任意两个集合的交集、并集、差集。
求任意一个集合的幂集。
求任意一个集合的所有m元子集。
求任意个元素的全排列。集合的表示采用列举法,如A={a,b,c,d}
六、实验总结与思考
集合的表示采用列举法,如A={a,b,c,d}。
(1)求任意两个集合的交集、并集、差集。
S1=new char;S2=new char;S=new char;
printf("请输入集合A=");
scanf("%s",S1);
Set_To_Array(S1,A);
printf("请输入集合B=");
scanf("%s",S2);
Set_To_Array(S2,B);
S=A;
k=strlen(S);
}
void Get_DSet()//集合的差运算
{
int i,j,k,flag;
char *A,*B,*C,*S1,*S2,*S;
A=new char;B=new char;C=new char;
S1=new char;S2=new char;S=new char;
printf("请输入集合A=");
for(i=0;Array[i]!='\0';i++){Set[j++]=Array[i];Set[j++]=',';}
if(j>1){Set[j-1]='}';Set[j]='\0';}
else {Set[j++]='}';Set[j]='\0';}
}
void Get_ISet()//集合的交运算
S[k]='\0';
Array_To_Set(S,P);
if(strlen(S)==strlen(A))printf("%s",P);
else printf("%s,",P);
}
printf("}\n");
}
int f(int n,int m)
{
int s=1,i;
for(i=n-m+1;i<=n;i++)s=s*i;
j=0;
for(i=1;i<(int)strlen(Set)-1;i=i+2)Array[j++]=Set[i];
Array[j]='\0';
}
void Array_To_Set(char *Array,char *Set)//一维字符数组转化为集合
{
int i,j;
j=0;
Set[j++]='{';
return s;
}
void Get_SubSet()//求集合指定元素个数的子集
{
int i,j,m,k,ip,g;
char *A,*S1,*S,*B;
A=new char;
S1=new char;
S=new char;
B=new char;
printf("A=");scanf("%s",S1);
if(flag)S[k++]=A[i];
}
S[k]='\0';
Array_To_Set(S,C);
printf("A-B=%s\n",C);
}
void Get_PSet()//求集合的幂集
{
int i,j,k,n;
char *A,*P,*S1,*S;
A=new char;P=new char;
S1=new char;S=new char;
if(A[i]==B[j]){S[k++]=A[i];break;}
S[k]='\0';
Array_To_Set(S,C);
printf("A∩B=%s\n",C);
}
}
void Get_USet()//集合的并运算
{
int i,j,k,flag;
char *A,*B,*C,*S1,*S2,*S;
A=new char;B=new char;C=new char;
printf("3、求两个集合的差集4、求一个集合的幂集\n");
printf("5、求一个集合的m元子集6、求任意集合元素的全排列\n");
printf("0、退出\n");
printf("请选择要进行的操作:");
scanf("%d",&i);
switch(i){
case 1:Get_ISet();break;
(4)求任意个元素的全排列。
设S={1,2,3,…,n},(a1,a2,…,an)和(b1,b2,…,bn)是S的两个全排列,若存在i∈{1,2,…,n},使得对一切j=1,2,…,i有aj=bj且ai+1<bi+1,则称排列(a1,a2,…,an)字典序的小于(b1,b2,…,bn)。记为(a1,a2,…,an)<(b1,b2,…,bn)。若(a1,a2,…,an)<(b1,b2,…,bn),且不存在(c1,c2,…,cn)使得(a1,a2,…,an)< (c1,c2,…,cn)<(b1,b2,…,bn),则称(b1,b2,…,bn)为(a1,a2,…,an)的下一个排列。
四、实验原始纪录(源程序、数据结构等)
#include<stdio.h>
#include<>
#include<string.h>
#include<math.h>
void Set_To_Array(char *Set,char *Array)//集合转化为一维字符数组
{
int i,j;
b=a-b;
a=a-b;
}
void swapc(char *A,int i,int j)
{
char temp;
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
void Get_SArrange()
{
int i,j,k,m,n,p,*C;
char *A,*S;
A=new char;
S=new char;
{
swap(C[i+k],C[n-k]);
swapc(A,i+k-1,n-k-1);
}
printf("-->%s",A);
}
printf("\n");
}
void main()
{
int i=1;
while(i>0)
{
System(“cls”);
printf("1、求两个集合的交集2、求两个集合的并集\n");
C=new int;
printf("请输入集合A=");
scanf("%s",S);
Set_To_Array(S,A);
n=strlen(A);
for(k=1;k<=n;k++)C[k]=k;
printf("全排列如下:\n");
printf("%s",A);
p=1;
for(k=1;k<=n;k++)p=p*C[k];
A∩B={x|x∈A∧x∈B}
A∪B={x|x∈A∨x∈B}
A-B={x|x∈A∧xB}
(2)求任意一个集合的幂集。
P(A)={Ai|i∈J},其中J={i|i是二进制数且 ≤i≤ }。
相关主题