📄 hamming.cpp
字号:
//编写生成(7,4,3)的hamming码具有编码、译码功能的程序
//虽然学了一段时间的C,但是这是第一个自己完成的小程序,看来还是有点压力好啊!缺点是很明显的:1、全篇只用一个main,没有模块化,重用性差;2、不能处理不合法的输入,健壮性差。特点:能识别出错位置并纠错。
#include <iostream.h>
int main()
{
cout<<"Please enter a code for send( 4 bit ): "<<endl;
int sendCode;
cin>>sendCode;
//产生code
int code[4] = {0};
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++ ){
cout<<code[i];
}
//产生校验矩阵
int H[3][7] = {
{0,0,0,1,1,1,1},
{0,1,1,0,0,1,1},
{1,0,1,0,1,0,1}};
//产生生成矩阵
int G[4][7] = {
{1,1,0,1,0,0,1},
{0,1,0,1,0,1,0},
{1,0,0,1,1,0,0},
{1,1,1,0,0,0,0}};
int codeword[7] = {0};
int errorcode[7] = {0};
//产生发送码字
int j = 0;
cout<<"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]);
cout<<codeword[j];
errorcode[j] = codeword[j];
}
//给出出错位数,得到错误码
cout<<" Please enter the error site: ";
int errorSite;
cin>>errorSite;
errorcode[ errorSite - 1 ] = ( codeword[ errorSite - 1 ] + 1 ) % 2;
cout<<" The error codeword is: " ;
for( j = 0; j < 7; j++ ){
cout<< errorcode[j] ;
}
//算出错误位并译码
cout<< " The error site is: " ;
int error_site[3] = {0};
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]);
cout<<error_site[i];
}
errorSite = error_site[0] *4 + error_site[1] * 2 + error_site[2];
cout<<errorSite;
codeword[ errorSite - 1 ] = ( errorcode[ errorSite - 1 ] + 1 ) % 2;
int correct_code[7] = {0};
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];
cout<< "The correct code is : " ;
for( i = 0; i < 4; i++ ){
cout<<correct_code[i];
}
cout<<" isn't it? " ;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -