?? 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 + -