1203 有穷自动机的构造

这是一个未完成的程序


#include<stdio.h> #include<string.h> char a[20][10]; char Vn[26]; char Vt[64]; int M=0; int N=0; int m=0; int flag=-1; void initial() //³õʼ»¯ { for(int b=0;b<26;b++) Vn[b]='#'; for(int c=0;c<64;c++) Vt[c]='#'; for(int d=0;d<20;d++) for(int e=0;e<10;e++) a[d][e]='#'; } void group() //ÅжÏÖÕ½á·ûºÅ { for(int k=0;a[k][0]!='e';k++) { for(int f=0;a[k][f]!='';f++) { if((a[k][f]>='A')&&(a[k][f]<='Z')) { for(int x=0;x<=M&&M<=27;x++) if(Vn[x]==a[k][f]) break; if((x-1)==M) { Vn[M]=a[k][f]; M++; } } else { for(int y=0;y<=N&&N<=20;y++) { if(a[k][f]==':'||a[k][f]=='=') break; else { if(Vt[y]==a[k][f]) break; } } if((y-1)==N) { Vt[N]=a[k][f]; N++; } } } } } void input() { for(int i=0;i<10;i++) a[m][i]='#'; scanf("%s",a[m]); while(strcmp(a[m],"end")) { if((a[m][0]>='A')&&(a[m][0]<='Z')) { int h=4; if((a[m][h]>='A')&&(a[m][h]<='Z')) { if((a[m][h+1]<'A')||(a[m][h+1]>'Z')) { if(a[m][h+2]!='') { printf("´Ë¹æÔò²»ÊÇÕýÔòÎÄ·¨µÄ¹æÔò£¬ÇëÖØÐÂÊäÈë "); input(); break; } } else { printf("´Ë¹æÔò²»ÊÇÕýÔòÎÄ·¨µÄ¹æÔò£¬ÇëÖØÐÂÊäÈë "); input(); break; } } else { if(a[m][h+1]!='') //U::=T { printf("´Ë¹æÔò²»ÊÇÕýÔòÎÄ·¨µÄ¹æÔò£¬ÇëÖØÐÂÊäÈë "); input(); break; } } } m++; scanf("%s",a[m]); } } void recongnise() //ÅжÏÊÇÈ·¶¨»¹ÊÇ·ÇÈ·¶¨ { for(int i=0;a[i][0]!='e';i++) { for(int j=i+1;a[j][0]!='e';j++) { int n=4; if(a[i][n]==a[j][n]) n++; if(a[i][n]==a[j][n]) break; } int h=4; if(a[i][h]==a[j][h]) h++; if(a[i][h]==a[j][h]) //U::=T { printf("´ËÎÄ·¨¶ÔÓ¦µÄÓÐÇî״̬×Ô¶¯»úÊÇ·ÇÈ·¶¨µÄ "); flag=0; break; } } if(a[i][0]=='e') //U::=WT { printf("´ËÎÄ·¨¶ÔÓ¦µÄÓÐÇî״̬×Ô¶¯»úÊÇÈ·¶¨µÄ "); flag=1; } } void output() //Êä³öÎÄ·¨ÏàÓ¦µÄÓÐÇî״̬×Ô¶¯»ú { if(flag==0) { printf("NFA N=({"); for(int i=0;Vn[i]!='#';i++) printf("%c,",Vn[i]); printf("S},{"); for(int j=0;Vt[j]!='#';j++) printf("%c,",Vt[j]); printf("},M',{S},{%c}) ",Vn[0]); printf("ÆäÖÐM': "); for(int x=0;Vn[x]!='#';x++) { for(int y=0;Vt[y]!='#';y++) { printf("M'(%c,%c)=",Vn[x],Vt[y]); for(int z=0;a[z][0]!='e';z++) if(a[z][4]==Vn[x]) if(a[z][5]==Vt[y]) printf("%c",a[z][0]); if(a[z][0]=='e') printf(" "); } printf(" "); } for(int u=0;Vt[u]!='#';u++) { printf("M'(S,%c)=",Vt[u]); for(int k=0;a[k][0]!='e';k++) if(a[k][4]==Vt[u]) printf("%c",a[k][0]); if(a[k][0]=='e') printf(" "); } } if(flag==1) { printf("DFA N=({"); for(int b=0;Vn[b]!='#';b++) printf("%c,",Vn[b]); printf("S},{"); for(int c=0;Vt[c]!='#';c++) printf("%c,",Vt[c]); printf("},M',S,{%c}) ",Vn[0]); printf("ÆäÖÐ: "); for(int p=0;Vn[p]!='#';p++) { for(int q=0;Vt[q]!='#';q++) for(int r=0;a[r][0]!='#';r++) if(a[r][4]==Vn[p]) if(a[r][5]==Vt[q]) printf("M'(%c,%c)=%c ",Vn[p],Vt[q],a[r][0]); printf(" "); } for(int d=0;Vt[d]!='#';d++) { for(int e=0;a[e][0]!='e';e++) if(a[e][4]==Vt[d]) printf("M'(S,%c)=%c ",Vt[d],a[e][0]); } } } void main() { initial(); printf("ÇëÊäÈëÎÄ·¨£¨ÒÔEND½áÊø£©: "); input(); group(); printf(" "); recongnise(); output(); printf(" "); }

  

原文地址:https://www.cnblogs.com/bestmoment/p/5017232.html