(7,3)循环码编码译码

 /*(7,3)循环码的编译及纠检错实现*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
/*函数声明*/
void Begin();
void Code();
void Decoding();
/*主函数*/
main()
    {
     printf("\n (7,3)循环码的编码和译码\n ");
     Begin();
    }
/*进行编码*/
void Code()
    {
     int Input[3];
     int Output[7];
     int reg[4]={0,0,0,0};
     int temp,i,j,t;
     printf("请输入3位信息码(输入3次,一次一位) :");
     for(i=0;i<3;i++)
     scanf(" %d",&Input[i]);                         /*输入3位信息码*/
     for(i=0;i<3;i++)                               /*进行除法操作*/
        {temp=reg[3]+Input[i];               /*生成多项式为g(x)=x^4+x^3+x^2+1*/ 
         if(temp==2) temp=0;
         reg[3]=reg[2]+temp;
         if(reg[3]==2)reg[3]=0;
         reg[2]=reg[1]+temp;
         if(reg[2]==2)reg[2]=0;
         reg[1]=reg[0];
         reg[0]=temp;
         }
     for(i=0;i<3;i++) Output[i]=Input[i];            /*进行编码操作*/
     for(i=3;i<7;i++)
        {
         temp=reg[3];
         for(j=3;j>0;j--)
             reg[j]=reg[j-1];
             reg[0]=0;
             Output[i]=temp;
         }
     printf("________________________________________");
     printf("\n");
     printf(" 编码结果: \n");
     for(i=0;i<7;i++)
     printf( "  %d  ",Output[i]);                          /*输出编码结果*/
     printf("\n");
     printf("________________________________________");
     printf("\n");
     Begin();
     }
/*译码并进行纠检错*/
void Decoding()
{ int Input[7],Output[7];
  int reg[4]={0,0,0,0,};
  int temp,i,d,x,p;
  printf("\n请输入7位码字(一次一位,输入7次):");
  for(i=0;i<7;i++)
  scanf("  %d",&Input[i]);                                 /*输入接受码组*/
  for(i=0;i<7;i++)                                         /*进入除法电路*/
  {temp=reg[3];						   /*计算伴随式S(x)*/
   reg[3]=reg[2]+temp;
   if(reg[3]==2)reg[3]=0;
   reg[2]=reg[1]+temp;
   if(reg[2]==2)reg[2]=0;
   reg[1]=reg[0];
   reg[0]=temp+Input[i];
   if(reg[0]==2)reg[0]=0;
  }
   p=reg[3]+2*reg[2]+4*reg[1]+8*reg[0];
   if(p!=1&&p!=2&&p!=3&&p!=7&&p!=8&&p!=13&&p!=14&&p!=0)
     {				          /*输入错误位数大于2位*/
      printf("    \"The error >=2\"  \n");
      getchar();
      exit(0);
      }
   printf("___________________________________________\n");
   printf("s(x)=");
  for(i=3;i>=0;i--)
   printf(" %d",reg[i]);
    printf("\n");
  for(i=0;i<7;i++)                                         /*纠正一位错误*/
   {d=reg[3]*reg[2]*reg[1]*(!reg[0]);
   Output[i]=d+Input[i];
   if(Output[i]==2) Output[i]=0;
   temp=reg[3];
   x=0;							   /*S(x)进行自发运算以求得错误位数*/
   reg[3]=temp+reg[2];
   if(reg[3]==2)reg[3]=0;
   reg[2]=reg[1]+temp;
   if(reg[2]==2)reg[2]=0;
   reg[1]=reg[0];
   reg[0]=temp+x;
   }                                                       /*输出3位信息源*/
   printf("The decoding bit3 is:");
   for(i=0;i<3;i++)
   printf(" %d ",Output[i]);
   printf("\n");
   printf("The Decoding bit7 is:");                         /*输出7位译码结果*/
   for(i=0;i<7;i++)
   printf(" %d ",Output[i]);
   printf("\n");
   printf("___________________________________________\n");
   Begin();
   }
/*选择操作*/
 void Begin()
    {  
     fflush(stdin);                                             
     char ch;
     printf("    -----------------------------------------------------------------");
     printf("\n");
     printf("    --     输入c开始编码          --");
     printf("\n");
     printf("    --     输入d开始译码          --");
     printf("\n");
     printf("    --     输入e离开程序          --");
     printf("\n");
     printf("    -----------------------------------------------------------------");
     printf("\n");
     ch=getchar();
     if(ch=='c') Code();
     else if(ch=='d') Decoding();
     else if(ch=='\n') Begin(); 
     else if(ch=='e') exit(0);
     else {printf("\"input error\"\n"); fflush(stdin);Begin();} /*输入错误提示*/   
    }


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值