离散第三次实验闭包文档格式.docx

上传人:b****3 文档编号:7015944 上传时间:2023-05-07 格式:DOCX 页数:23 大小:53.25KB
下载 相关 举报
离散第三次实验闭包文档格式.docx_第1页
第1页 / 共23页
离散第三次实验闭包文档格式.docx_第2页
第2页 / 共23页
离散第三次实验闭包文档格式.docx_第3页
第3页 / 共23页
离散第三次实验闭包文档格式.docx_第4页
第4页 / 共23页
离散第三次实验闭包文档格式.docx_第5页
第5页 / 共23页
离散第三次实验闭包文档格式.docx_第6页
第6页 / 共23页
离散第三次实验闭包文档格式.docx_第7页
第7页 / 共23页
离散第三次实验闭包文档格式.docx_第8页
第8页 / 共23页
离散第三次实验闭包文档格式.docx_第9页
第9页 / 共23页
离散第三次实验闭包文档格式.docx_第10页
第10页 / 共23页
离散第三次实验闭包文档格式.docx_第11页
第11页 / 共23页
离散第三次实验闭包文档格式.docx_第12页
第12页 / 共23页
离散第三次实验闭包文档格式.docx_第13页
第13页 / 共23页
离散第三次实验闭包文档格式.docx_第14页
第14页 / 共23页
离散第三次实验闭包文档格式.docx_第15页
第15页 / 共23页
离散第三次实验闭包文档格式.docx_第16页
第16页 / 共23页
离散第三次实验闭包文档格式.docx_第17页
第17页 / 共23页
离散第三次实验闭包文档格式.docx_第18页
第18页 / 共23页
离散第三次实验闭包文档格式.docx_第19页
第19页 / 共23页
离散第三次实验闭包文档格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

离散第三次实验闭包文档格式.docx

《离散第三次实验闭包文档格式.docx》由会员分享,可在线阅读,更多相关《离散第三次实验闭包文档格式.docx(23页珍藏版)》请在冰点文库上搜索。

离散第三次实验闭包文档格式.docx

constintE_L_Kuo=60,E_R_Kuo=62;

//C_L_Kuo[]="

《"

constintC_L_Kuo1=-95,C_L_Kuo2=-74;

//C_R_Kuo[]="

》"

constintC_R_Kuo1=-95,C_R_Kuo2=-73;

unsignedintstringcmp(constchar*p1,constchar*p2);

voidwelcome();

voidget_s(char**p,charg);

unsignedintjie_qu(constchar*x1,constchar*x2,char*f_jq,char*s_jq);

voidRsame(char**R,char**R_S);

charchoice();

voidprint(char**p);

voidfree_all(char**p);

voidI(char**x,char**I_x);

voidRc(char**R,char**Rc);

voidnew_Xuou_Fu_He(char**pa,char**pb,char**pc);

voidDele_Same_Str(char**pc);

unsignedintstringcmp(constchar*p1,constchar*p2)

{

//如果不同,那么就返回1,如果相同就返回0

inti1,i2;

for(i1=0,i2=0;

p1[i1]!

='

\0'

i1++,i2++)

{

if(p1[i1]==p2[i2])

continue;

//E_Dou=44,C_Dou1=-93,C_Dou2=-84

if(p1[i1]==C_Dou1&

&

p1[i1+1]==C_Dou2)

{

if(p2[i2]==E_Dou)

{

i1++;

continue;

}

}

if(p2[i2]==C_Dou1&

p2[i2+1]==C_Dou2)

if(p1[i1]==E_Dou)

i2++;

//E_L_Kuo=60C_L_Kuo1=-95,C_L_Kuo2=-74;

if(p1[i1]==C_L_Kuo1&

p1[i1+1]==C_L_Kuo2)

if(p2[i2]==E_L_Kuo)

if(p2[i2]==C_L_Kuo1&

p2[i2+1]==C_L_Kuo2)

if(p1[i1]==E_L_Kuo)

//E_R_Kuo=62C_R_Kuo1=-95,C_R_Kuo2=-73;

if(p1[i1]==C_R_Kuo1&

p1[i1+1]==C_R_Kuo2)

if(p2[i2]==E_R_Kuo)

if(p2[i2]==C_R_Kuo1&

p2[i2+1]==C_R_Kuo2)

if(p1[i1]==E_R_Kuo)

return1;

}

return0;

}

voidwelcome()

//在这里说明集合X元素不得多余10个,二元关系R能的序偶不得多余15

printf("

************************************************************\n"

);

****\n"

**欢迎进入逻辑运算软件**\n"

**(可进行关系的闭包运算。

)**\n"

**(包括:

自反闭包r(R),对称闭包s(R),可传递闭包t(R))**\n"

**用∪表示并**\n"

**用<

null>

表示集合为空**\n"

**集合X元素不得多于10个**\n"

**集合X的二元关系R元素不得多于15个**\n"

**元素长度不得多于15个字节**\n"

**每个元素间用分号;

或者是;

隔开**\n"

**eg:

…2;

3…或者…2;

3…**\n"

**序偶自身之间用,或是,分开**\n"

**eg:

…《1,2》;

《2,3》…**\n"

************************************************************\n\n"

voidget_s(char**p,charg)

char*s=NULL;

chart[LONG]={'

};

ints_i,p_k,t_j,t_m;

if((s=(char*)calloc(LONG*NUMBER,sizeof(char)))==NULL)

printf("

内存分配失败!

\n"

exit

(1);

if(g=='

X'

请输入集合%c元素:

\n%c={"

g,g);

R'

请输入二元关系%c的元素:

gets(s);

putchar('

}'

\n'

s_i=strlen(s);

s[s_i]='

p_k=0;

//E_Fen=59,C_Fen1=-93,C_Fen2=-69

for(s_i=0,t_j=0;

s[s_i]!

s_i++,t_j++)

if(s[s_i]!

=E_Fen)

if(s[s_i]!

=C_Fen1&

s[s_i]!

=C_Fen2)

t[t_j]=s[s_i];

//切记条件多时,就用if一个个表示出来,不可妄想省if,那样只会把逻辑搞的很混乱

if(s[s_i]==C_Fen1&

s[s_i+1]!

if((s[s_i]==E_Fen)||(s[s_i]==C_Fen2&

s[s_i-1]==C_Fen1))

if((p[p_k]=(char*)calloc(LONG,sizeof(char)))==NULL)

//总感觉这里对于这个空间的分配要把X与R进行区分开。

printf("

exit

(1);

strcpy(p[p_k],t);

t_j=-1;

p_k++;

for(t_m=0;

t_m<

LONG;

t_m++)

t[t_m]='

if(p_k>

NUMBER)

printf("

集合元素多于%ud!

存储失败。

NUMBER);

exit

(1);

free(s);

unsignedintjie_qu(constchar*x1,constchar*x2,char*f_jq,char*s_jq)

inti,k;

//x1序偶前半部分给f_jq

i=0;

if(x1[0]!

=E_L_Kuo)

if(x1[0]!

=C_L_Kuo1)

return1;

if(x1[0]==E_L_Kuo)

i=1;

if(x1[0]==C_L_Kuo1)

i=2;

k=0;

//如果出现<

1>

或是《,1》就会导致截取数组为空,

//不过没关系在Bi_Bao函数中有如果为空报警并结束函数.

while

(1)

if((x1[i]==E_Dou)||(x1[i]==C_Dou1))

break;

f_jq[k]=x1[i];

k++;

i++;

//x2序偶后半部分给s_jq

for(i=0;

i++)

if((x2[i]==E_Dou)||(x2[i]==C_Dou2))

i=i+1;

if(x2[i]==E_R_Kuo)

if(x2[i]==C_R_Kuo1)

s_jq[k]=x2[i];

voidRsame(char**R,char**R_S)

charf_jq[LONG]={'

},s_jq[LONG]={'

inti_R,i_RS,j,k;

i_RS=0;

for(i_R=0;

R[i_R]!

=NULL;

i_R++)

k=jie_qu(R[i_R],R[i_R],f_jq,s_jq);

if(k)

}\n"

序偶输入有误!

return;

if((f_jq[0]=='

)||(s_jq[0]=='

))

序偶输入有误!

k=stringcmp(f_jq,s_jq);

for(j=0;

j<

HALF_LONG;

j++)

f_jq[j]='

s_jq[j]='

if((R_S[i_RS]=(char*)calloc(LONG,sizeof(char)))==NULL)

strcpy(R_S[i_RS],R[i_R]);

i_RS++;

free(R[i_R]);

for(j=i_R;

R[j]!

R[j]=R[j+1];

i_R=i_R-1;

charchoice()

charc,s;

请输入选项:

while(!

(scanf("

%[0-3]c"

&

c)))

while((s=getchar())!

s!

=EOF);

输入有误!

请重新输入。

returnc;

voidprint(char**p)

inti;

p[i+1]!

%s;

p[i]);

%s"

voidfree_all(char**p)

p[i]!

free(p[i]);

voidmain()

char*X[NUMBER]={NULL},*R[NUMBER]={NULL},*R_Same[NUMBER]={NULL};

char*I_x[NUMBER]={NULL},*R_c[NUMBER]={NULL};

char*t_R[NUMBER*7]={NULL};

char*R_R_1[NUMBER*2]={NULL},*R_R_2[NUMBER*3]={NULL};

charc;

inti,t_r,n;

t_r=0;

n=0;

welcome();

get_s(X,'

get_s(R,'

Rsame(R,R_Same);

I(X,I_x);

Rc(R,R_c);

new_Xuou_Fu_He(R,R,R_R_1);

new_Xuou_Fu_He(R_R_1,R,R_R_2);

R_Same[i]!

t_R[t_r]=R_Same[i];

t_r++;

R[i]!

t_R[t_r]=R[i];

R_R_1[i]!

t_R[t_r]=R_R_1[i];

R_R_2[i]!

t_R[t_r]=R_R_2[i];

Dele_Same_Str(t_R);

*******************************************\n"

1:

自反闭包r(R)=R∪I(x)\n"

2:

对称闭包S(R)=R∪R(c)\n"

3:

可传递闭包t(R)=R∪R^2∪R^3∪…\n"

0:

Exit!

c=choice();

if(c!

0'

n++;

if(n==1)

X={"

print(X);

R={"

print(R_Same);

print(R);

}

if(c=='

elseif(c=='

1'

r(R)={"

print(I_x);

print(R);

2'

S(R)={"

print(R_Same);

print(R_c);

3'

t(R)={"

print(t_R);

free_all(t_R);

free_all(I_x);

free_all(R_c);

voidI(char**x,char**I_x)

chard[]="

"

charR_Kuo_Hao[]="

inti,j;

j=0;

x[i]!

if((s=(char*)calloc(LONG,sizeof(char)))==NULL)

s[0]=E_L_Kuo;

strcat(s,x[i]);

strcat(s,d);

strcat(s,R_Kuo_Hao);

I_x[j]=s;

j++;

s=NULL;

voidRc(char**R,char**Rc)

inti_R,i_Rc,j,k;

i_Rc=0;

strcat(s,s_jq);

strcat(s,f_jq);

Rc[i_Rc]=s;

i_Rc++;

voidnew_Xuou_Fu_He(char**pa,char**pb,char**pc)

//f_jq是用于截取一个序偶的前半部分,s_jq是截取另一个序偶的后半部分

charf_jq[HALF_LONG]={'

},s_jq[HALF_LONG]={'

intia,ib,ic;

intj;

unsignedintk;

ic=0;

for(ia=0;

pa[ia]!

ia++)

for(ib=0;

pb[ib]!

ib++)

k=jie_qu(pb[ib],pa[ia],f_jq,s_jq);

//小心前面两个参数别传错了

if(k)

return;

if((f_jq[0]=='

k=stringcmp(f_jq,s_jq);

for(j=0;

f_jq[j]='

s_jq[j]='

k=jie_qu(pa[ia],pb[ib],f_jq,s_jq);

//注意这个传参数的顺序.

if((pc[ic]=(char*)calloc(LONG,sizeof(char)))==NULL)

for(j=HALF_LONG-2;

j>

0;

j--)

f_jq[j]=f_jq[j-1];

f_jq[j]=E_L_Kuo;

s_jq[j]!

j++);

s_jq[j]=E_R_Kuo;

strcpy(pc[ic],f_jq);

strcat(pc[ic],d);

strcat(pc[ic],s_jq);

ic++;

Dele_Same_Str(pc);

voidDele_Same_Str(char**pc)

inti,j,k,m;

char*p;

pc[i]!

for(j=i+1;

pc[j]!

m=stringcmp(pc[i],pc[j]);

if(m)

p=pc[j];

free(p);

for(k=j;

pc[k]!

k++)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2