C语言实现循环码系统与非系统编码

循环码系统与非系统编码的C语言实现:

#include "stdio.h"

#include <stdlib.h>

#define N  10

//系统编码实现

void X(int g[N],int c[N],int r,int n)

{int degg,degc,i,k,t,j,e,u,sum=0;

 int d[N][2*N]={0},C[N],R[N],a[N][2*N],q[N];

 degg=r;

 //求信息多项式的次幂

 for(i=0;i<=n-r-1;i++)

  {

    if(c[i]!=0)

    {degc=n-i-1;

     break;

    }

  }

  for(i=0;i<N;i++)

      {q[i]=g[i];

       R[i]=c[i];

       }

 k=degc-degg;

 e=k;

 //二进制除法实现

 for(j=0;j<N;j++)

 {

     for(i=0;i<N;i++)

      {

        q[i]=g[i];

       }

     for(i=n-1;i>=e;i--)

     {

        t=q[i];q[i]=q[i-e];q[i-e]=t;

     }

     

    for(i=0;i<=n-1;i++)

    {  

        c[i]=(c[i]+q[n-1-i])%2;

    }

    for(i=0;i<=n-1;i++)

      {

        if(c[i]!=0)

        {degc=n-i-1;

         break;

        }

      }

     e=degc-degg;

     u=j;

     if(e<0){break;}

      }

 for(i=0;i<=n-1;i++)

 {

    C[i]=(R[i]+c[i])%2;

    }

 //输出

 printf("系统编码的结果为:/n");

  printf("/t");

  for(j=0;j<=n-1;j++)

   printf("%d ",C[j]);

  printf("/n");

}

//非系统编码实现

void UX(int g[N],int c[N],int r,int n)

{int a[N][2*N],x[N];

 int i,j,k,sum=0;

 //二进制乘法

 for(j=0;j<=n-r-1;j++)

 {for(i=0;i<j;i++)

    a[j][i]=0;

  for(i=0;i<=n-1;i++)

   a[j][i+j]=c[j]*g[i];

  for(k=i+j;k<=2*n-r-2;k++)

   a[j][k]=0;

 }

 for(j=0;j<=2*n-r-2;j++)

  {sum=0;

   for(i=0;i<=n-r-1;i++)

    sum=(a[i][j]+sum)%2;

   x[j]=sum;

  }

  //输出

  printf("非系统编码的结果:/n");

  printf("/t");

  for(j=0;j<=n-1;j++)

   printf("%d ",x[j]);

  printf("/n");

    }

void main()

{int i,n,m,t,r;

 int g[N]={0},c[N]={0};

 printf("****循环码编码方法(码长n<=10)****/n");

 printf("/t输入码长n:");

 scanf("%d",&m);

 n=m;

 switch(n)

 {case 1 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

         switch(r)

         {case 0:g[0]=1;break;

         } break;

  case 2 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

          switch(r)

          {case 0:g[0]=1;break;

           case 1:g[0]=1;g[1]=1;break;

          } break;

  case 3 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

          switch(r)

          {case 0:g[0]=1;break;

           case 1:g[0]=1;g[1]=1;break;

           case 2:g[0]=1;g[1]=1;g[2]=1;break;

          } break;

  case 4 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

          switch(r)

          {case 0:g[0]=1;break;

           case 1:g[0]=1;g[1]=1;break;

           case 2:g[0]=1;g[1]=0;g[2]=1;break;

           case 3:g[0]=1;g[1]=1;g[2]=1;g[3]=1;break;

          } break;

  case 5 :printf("输入校验位r=0,1,4:");

          scanf("%d",&r);

          switch(r)

          {case 0:g[0]=1;break;

           case 1:g[0]=1;g[1]=1;break;

           case 4:g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;break;

          } break;

  case 6 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

          switch(r)

          {case 0:g[0]=1;break;

           case 1:g[0]=1;g[1]=1;break;

           case 2:g[0]=1;g[1]=1;g[2]=1;break;

           case 3:g[0]=1;g[1]=0;g[2]=0;g[3]=1;break;

           case 4:g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1;break;

           case 5:g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;break;

          } break;

  case 7 :printf("输入校验位r=0,1,3,4,6:");

          scanf("%d",&r);

          switch(r)

          {case 0 :g[0]=1;break;

           case 1 :g[0]=1;g[1]=1;break;

           case 3 :g[0]=1;g[1]=1;g[2]=0;g[3]=1;break;

           case 4 :g[0]=1;g[1]=1;g[2]=1;g[3]=0;g[4]=1;break;

           case 6 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1; g[6]=1;break;

          } break;

  case 8 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

          switch(r)

          {case 0 :g[0]=1;break;

           case 1 :g[0]=1;g[1]=1;break;

           case 2 :g[0]=1;g[1]=0;g[2]=1;break;

           case 3 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;break;

           case 4 :g[0]=1;g[1]=0;g[2]=0;g[3]=0;g[4]=1;break;

           case 5 :g[0]=1;g[1]=1;g[2]=0;g[3]=0;g[4]=1;g[5]=1;break;

           case 6 :g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1;g[5]=0; g[6]=1;break;

           case 7 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;g[6]=1; g[7]=1;break;

          } break;

  case 9 :printf("输入校验位r<=%d:",n-1);

          scanf("%d",&r);

          switch(r)

          {case 0 :g[0]=1;break;

           case 1 :g[0]=1;g[1]=1;break;

           case 2 :g[0]=1;g[1]=0;g[2]=1;break;

           case 3 :g[0]=1;g[1]=0;g[2]=0;g[3]=1;break;

           case 4 :g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1;break;

           case 5 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;break;

           case 6 :g[0]=1;g[1]=1;g[2]=0;g[3]=1;g[4]=0;g[5]=1; g[6]=1;break;

           case 7 :g[0]=1;g[1]=0;g[2]=1;g[3]=1;g[4]=1;g[5]=1; g[6]=0;g[7]=1;break;

           case 8 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1;g[6]=1; g[7]=1;g[8]=1;break;

          } break;

  case 10 :printf("输入校验位r=0,1,2,,4,5,6,8,9:");

          scanf("%d",&r);

          switch(r)

          {case 0 :g[0]=1;break;

           case 1 :g[0]=1;g[1]=1;break;

           case 2 :g[0]=1;g[1]=0;g[2]=1;break;

           case 4 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;break;

           case 5 :g[0]=1;g[1]=0;g[2]=0;g[3]=0;g[4]=0;g[5]=1;break;

           case 6 :g[0]=1;g[1]=1;g[2]=0;g[3]=0;g[4]=0; g[5]=1;g[6]=1;break;

           case 8 :g[0]=1;g[1]=0;g[2]=1;g[3]=0;g[4]=1; g[5]=0;g[6]=1;g[7]=0;g[8]=1;break;

           case 9 :g[0]=1;g[1]=1;g[2]=1;g[3]=1;g[4]=1;g[5]=1; g[6]=1;g[7]=1;g[8]=1;g[9]=1;break;

          } break;

 }   

 printf("生成多项式系数矩阵为(幂次从低到高):/n");

 for(i=0;i<=n-1;i++)

  printf("%d ",g[i]);

 printf("/n");

 printf("输入信源信息向量c(%d)/n",n-r);

 for(i=0;i<=n-r-1;i++)

  scanf("%d",&c[i]);

 while(1)

 {

 printf("/t*****选择编码方式及命令*****/n");

 printf("/t     1:系统编码/n");

 printf("/t     2:非系统编码/n");

 printf("/t     3:退出程序!!!/n");

  printf("/t***************************/n");

 scanf("%d",&t);

 switch(t)

 {case 1 :X(g,c,r,n);break;

  case 2 :UX(g,c,r,n);break;

  case 3 :printf("退出程序〉〉〉");exit(0);break;

 }

 printf("/n");

 }

}

你可能感兴趣的:(C语言实现循环码系统与非系统编码)