c语言编码7 3循环码码组,(7,3)循环码编码译码

#include/*函数声明*/

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();} /*输入错误提示*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值