海明编译码c语言实现,[求助]用C语言实现海明校验码,高手来帮帮忙啊!

#define N 13

#define M 9

#include

void Deal(char S[],char D[],int n);

main()

{ char H[N],D[M],S[4];

int i;

printf("请输入一个8位的二进制代码: ");

gets(D);

/*----------------------------------------------------------------*/

H[12]=D[7]+D[6]+D[4]+D[3]+D[1];

H[12]=H[12]%2==0 ? '0':'1'; /*实现异或功能求各位海明校验码*/

H[11]=D[7]+D[5]+D[4]+D[2]+D[1];

H[11]=H[11]%2==0 ? '0':'1';

H[9]=D[6]+D[5]+D[4]+D[0];

H[9]=H[9]%2==0 ? '0':'1';

H[5]=D[3]+D[2]+D[1]+D[0];

H[5]=H[5]%2==0 ? '0':'1';

for(i=0;i

H[0]+=D[i];

H[0]+=H[12]+H[11]+H[9]+H[5];

H[0]=H[0]%2==0 ? '0':'1';

H[1]=D[0];H[2]=D[1];H[3]=D[2];H[4]=D[3];H[6]=D[4];H[7]=D[5];H[8]=D[6];H[10]=D[7];

printf("--------------------------------------------\n");

printf("8位二制代码的原码为: ");

for(i=0;i

printf("%c",D[i]);

printf("\n它的海明码为: ");

for(i=0;i

printf("%c",H[i]);

/*---------------------------------------------------------------*/

printf("\n--------------------------------------------------------------------------\n");

printf("\n为了能让此程序实现海明校验及纠错的能力请把原8位二进制代码中任意一位弄错!\n");

gets(D);

S[3]=H[12]+D[7]+D[6]+D[4]+D[3]+D[1];

S[3]=S[3]%2==0 ? '0':'1';

S[2]=H[11]+D[7]+D[5]+D[4]+D[2]+D[1]; /*奇偶形成电路*/

S[2]=S[2]%2==0 ? '0':'1';

S[1]=H[9]+D[6]+D[5]+D[4]+D[0];

S[1]=S[1]%2==0 ? '0':'1';

S[0]=H[5]+D[3]+D[2]+D[1]+D[0];

S[0]=S[0]%2==0 ? '0':'1';

printf("--------------------------------------------\n");

Deal(S,D,4); /*调用4~16译码器*/

}

void Deal(char S[],char D[],int n) /*模拟4~16译码器并对其纠正处理*/

{ int i,sum,var,e;

sum=0;e=1;

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

{ if(S[i]=='1') var=S[i]-'0';

else var=S[i]-'0';

sum+=var*e;

e*=2;

}

switch(sum) /*选择并处理*/

{ case 0: { printf("经校验后没有错误!\n"); break; }

case 3: { printf("经校验后发现1号位置有错并对其纠正输出!\n");

D[7]=D[7]=='1'? '0':'1';

break; }

case 5: { printf("经校验后发现2号位置有错并对其纠正输出!\n");

D[6]=D[6]=='1'? '0':'1';

break; }

case 6: { printf("经校验后发现3号位置有错并对其纠正输出!\n");

D[5]=D[5]=='1'? '0':'1';

break; }

case 7: { printf("经校验后发现4号位置有错并对其纠正输出!\n");

D[4]=D[4]=='1'? '0':'1';

break; }

case 9: { printf("经校验后发现5号位置有错并对其纠正输出!\n");

D[3]=D[3]=='1'? '0':'1';

break; }

case 10: { printf("经校验后发现6号位置有错并对其纠正输出!\n");

D[2]=D[2]=='1'? '0':'1';

break; }

case 11: { printf("经校验后发现7号位置有错并对其纠正输出!\n");

D[1]=D[1]=='1'? '0':'1';

break; }

case 12: { printf("经校验后发现8号位置有错并对其纠正输出!\n");

D[0]=D[0]=='1'? '0':'1';

break; }

default: printf("校验位发生错误!\n");

}

for(i=0;i

printf("%c",D[i]); /*输出纠正后的结果*/

printf("\n");

}

这个是我同学做的,能帮忙改一下也成啊,学校老师急着要作业,为难死小弟了,谢谢了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值