• 1118有限自动机的构造与识别


      1 #include<string.h>
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 int main()
      5 {
      6     char p[30][30];
      7     char q[30][30];
      8     int line=0;
      9     int n;
     10     int i,j;
     11     int count=0;
     12     int k,t=0;
     13     int flag=0;
     14     int l,m=0;
     15     char VN[30]={''};
     16     char VT[30]={''};
     17     printf("请输入规则个数");
     18     scanf("%d",&n);
     19     line=n;
     20     for(i=0;i<30;i++)
     21     for(j=0;j<30;j++)
     22     {
     23         p[i][j]='';
     24         q[i][j]='';
     25     }
     26     printf("请输入文法:
    ");
     27     for(i=0;i<line;i++)
     28     {
     29         scanf("%s",p[i]);
     30     }
     31     l=0;
     32     m=0;
     33     for(i=0;i<line;i++)
     34     {
     35         for(j=0;j<30&&(p[i][j]!='');j++)
     36         {
     37             if(p[i][j]<='z'&&p[i][j]>='a'||(p[i][j]<='9'&&p[i][j]>='0'))
     38             {
     39                 flag=0;
     40                 for(t=0;VN[t]!='';t++)
     41                 {
     42                     if(VN[t]==p[i][j])
     43                    {
     44                         flag=1;
     45                         break;
     46                    }
     47                 }
     48                 if(flag==0)
     49                 {
     50                     VN[l]=p[i][j];
     51                     l++;
     52                 }
     53             }
     54             if(p[i][j]<='Z'&&p[i][j]>='A')
     55             {
     56                 flag=0;
     57                 for(t=0;t<30&&(VT[t]!='');t++)
     58                 {
     59                     if(VT[t]==p[i][j])
     60                     {
     61                         flag=1;
     62                         break;
     63                     }
     64             }
     65             if(flag==0)
     66             {
     67                 VT[m]=p[i][j];
     68                 m++;
     69             }
     70         }
     71     }
     72 }
     73     count=0;
     74     k=0;
     75     for(i=0;i<line;i++)
     76     {
     77         for(j=4;j<30&&(p[i][j]!='');j++)
     78         {
     79             if((p[i][j]<='z'&&p[i][j]>='a')||(p[i][j]<='Z'&&p[i][j]>='A')||(p[i][j]<='9'&&p[i][j]>='0'))
     80             {
     81                 q[count][k]=p[i][j];
     82                 k++;
     83             }
     84             else
     85             {
     86                 count++;
     87                 k=0;
     88             }
     89         }
     90         count++;
     91         k=0;
     92     }
     93     flag=0;
     94     for(i=0;i<count;i++)
     95     {
     96         for(j=i+1;j<count;j++)
     97         {
     98             if(strcmp(q[i],q[j])==0)
     99             {
    100                 flag=1;
    101                 break;
    102             }
    103         }
    104     }
    105     if(flag==1)
    106     {
    107         printf("是非确定的有穷状态自动机,即NFA
    
    ");
    108         printf("构造的有穷状态自动机为:
    ");
    109         printf("NFA N=(K,E(总和的意思),M,{S},{Z})
    ");
    110     }
    111     else
    112     {
    113         printf("是确定的有穷状态自动机,即DFA
    
    
    ");
    114         printf("构造的有穷状态自动机为:
    ");
    115         printf("DFA N=(K,E(总和的意思),M,{S},{Z})
    ");
    116     }
    117     printf("其中,
    K={S");
    118     for(i=0;i<30&&(VT!='');i++)
    119     {
    120         printf(",%c",VT[i]);
    121     }
    122     printf("}
    ");
    123     printf("E={");
    124     for(i=0;i<30&&(VN[i]!='');i++)
    125     {
    126         printf("%c ",VN[i]);
    127     }
    128     printf("}
    ");
    129     //分离文法
    130     k=0;
    131     count=0;
    132     for(i=0;i<line;i++)
    133     {
    134         j=4;
    135         while(p[i][j]!='')
    136         {
    137             if(k<4)
    138             {
    139                 q[count][k]=p[i][k];
    140                 k++;
    141             }
    142             else
    143             {
    144                 if((p[i][j]<='z'&&p[i][j]>='a')||(p[i][j]<='Z'&&p[i][j]>='A')||(p[i][j]<='9'&&p[i][j]>='0'))
    145                 {
    146                     q[count][k]=p[i][j];
    147                     k++;
    148                     j++;
    149                 }
    150                 if(p[i][j]=='l')
    151                 {
    152                     count++;
    153                     k=0;
    154                     j++;
    155                 }
    156             }
    157         }
    158         count++;
    159         k=0;
    160     }
    161     printf("
    ");
    162     //打印
    163     printf("M:
    ");
    164     l=0;
    165     while(VN[l]!='')
    166     {
    167         printf("M(S,%c)={",VN[l]);
    168         for(i=0;i<30;i++)
    169         {
    170             for(j=4;j<30&&(q[i][j]!='');j++)
    171             {
    172                 if(VN[l]==q[i][j]&&(q[i][j+1]=='')&&(q[i][j-1]=='='))
    173                 printf("%c",q[i][0]);
    174             }
    175         }
    176         printf("}	");
    177         l++;
    178     }
    179     printf("
    ");
    180     l=0;
    181     k=0;
    182     while(VT[k]!='')
    183     {
    184         l=0;
    185         while(VN[l]!='')
    186         {
    187             printf("M(%c,%c)={",VT[k],VN[l]);
    188             for(i=0;i<30;i++)
    189             {
    190                 for(j=4;j<30&&(q[i][j]!='');j++)
    191                 {
    192                     if(VT[k]==q[i][j]&&VN[l]==q[i][j+1])
    193                     printf("%c",q[i][0]);
    194                 }
    195             }
    196             printf("}	");
    197             l++;
    198         }
    199         k++;
    200         printf("
    ");
    201     }
    202     system("pause");
    203 }
    204                                     
  • 相关阅读:
    ASP.NET 2.0 正式版中无刷新页面的开发
    Flex在线录制视频并回放(源码)
    url重写
    在Web应用程序中执行计划任务
    添加类别和修改类别(无限级别分类)
    用C#制作新闻阅读器
    字符串处理
    编程珠玑随笔
    实现元素的全排列
    提高代码质量的三要素
  • 原文地址:https://www.cnblogs.com/peivxuan/p/5039480.html
Copyright © 2020-2023  润新知