| 编写生成(7,4,3)的hamming码具有编码、译码功能的程序 虽然学了一段时间的C,但是这是第一个自己完成的小程序,看来还是有点压力好啊!缺点是很明显的:1、全篇只用一个main,没有模块化,重用性差;2、不能处理不合法的输入,健壮性差。特点:能识别出错位置并纠错。 #include int main(){ printf( "Please enter a code for send( 4 bit ): " ); int sendCode; scanf( "%d", &sendCode ); //产生code int code[4] = ; code[0] = sendCode / 1000; int send1 = sendCode % 1000; code[1] = send1 / 100; int send2 = send1 % 100; code[2] = send2 / 10; code[3] = send2 % 10;
//测试 int i = 0; for( i = 0; i < 4; i++ ){ printf( "%d\n",code[i] ); } //产生校验矩阵 int H[3][7] = { , , }; //产生生成矩阵 int G[4][7] = { , , , }; int codeword[7] = ; int errorcode[7] = ; //产生发送码字 int j = 0; printf( "Your codeword for send is: " ); for( j = 0; j < 7; j++ ){ codeword[j] = (G[0][j]*code[0])^ (G[1][j]*code[1])^ (G[2][j]*code[2])^ (G[3][j]*code[3]); printf( "%d",codeword[j] ); errorcode[j] = codeword[j]; } //给出出错位数,得到错误码 printf( "\nPlease enter the error site: " ); int errorSite; scanf( "%d",&errorSite ); errorcode[ errorSite - 1 ] = ( codeword[ errorSite - 1 ] + 1 ) % 2; printf( "\nThe error codeword is: " ); for( j = 0; j < 7; j++ ){ printf( "%d",errorcode[j] ); } //算出错误位并译码 printf( "\nThe error site is: " ); int error_site[3] = ; for( i = 0; i < 3; i++ ){ error_site[i] = (H[i][0]*errorcode[0])^ (H[i][1]*errorcode[1])^ (H[i][2]*errorcode[2])^ (H[i][3]*errorcode[3])^ (H[i][4]*errorcode[4])^ (H[i][5]*errorcode[5])^ (H[i][6]*errorcode[6]); printf( "%d",error_site[i] ); } errorSite = error_site[0] *4 + error_site[1] * 2 + error_site[2]; printf( " = %d\n",errorSite ); codeword[ errorSite - 1 ] = ( errorcode[ errorSite - 1 ] + 1 ) % 2; int correct_code[7] = ; correct_code[0] = codeword[6]; correct_code[1] = codeword[5]; correct_code[2] = codeword[4]; correct_code[3] = codeword[2]; correct_code[4] = codeword[3]; correct_code[5] = codeword[1]; correct_code[6] = codeword[0]; printf( "The correct code is : " ); for( i = 0; i < 4; i++ ){ printf( "%d",correct_code[i] ); } printf( " isn't it?\n" ); return 0; }
|