輸入一段10101…序列,生成其海明碼。生成過程在**中已經表示出來了。
本**在code::blocks17.12中正常執行。
#include
#include
#include
#define maxsize 60
//2的冪
intpower
(int subnum)
int res=2;
while((
--subnum)
>0)
return res;
}char procode[maxsize]
;//建立乙個原始**序列
char
*create_a_code()
//計算漢明碼的位數
intcount_the_checkcode_digit
(int digit)
for(temp=3;
;temp++)}
}//拆開原有**,留出漢明碼的位置
char
*break_the_code
(char
* precode)
i=0;
while
(++i<=checkcode_digit+1)
else
} code[i-1]
='\0'
;printf
("漢 明 碼:%s\n"
,code)
;return code;
}//奇偶位校驗函式
intparity_check
(char
* code)
res+
=code[i]
-'0';}
if(res%2==
0)else
}//拆分**進行奇偶位校驗
//輸入1---1:拆成2 4 6 8 10...
//輸入2---2:拆成2 / 5 6 / 9 10 /...
//輸入3---4:拆成4 5 6 / 11 12 13 14 / 19 20 21 22 /...
//輸入4---8:拆成8 9 10 11 12 13 14 / 23 24 25 26 27 28 /...
char
*divide_the_code
(char
* code,
int times)
while
(i<=times*2-
2)}while(1
)printf
(" ");
i++;}
if(code[i+1]
=='\0'
)for
(int r=
0;r)printf
("^");
procode[j++
]=code[i++];
}if(code[i+1]
=='\0')}
procode[j]
='\0'
;printf
("--->>%s"
,procode)
;return procode;
}void
construct_hamming_code
(char
* code)
if(code[i]
=='\0'
)char
* temp=
divide_the_code
(code,times++);
code[i]
=parity_check
(temp)
+'0'
;printf
("漢 明 碼:%s\n"
,code)
; i++;}
}int
main()
}
關於海明碼
1.確定冗餘位長度 設原始資料為n,冗餘位為k 則n k 1 2 k 1001011 共7位,則8 k 2 k k 4 冗餘位為4位 2.將原始資料新增校驗位組成碼字 校驗位的設定 2 0 2 1 2 2 2 3 1 2345 6789 1011 校驗校驗1校驗 001校驗 011 3.確定每個校驗...
海明碼(漢明碼)的工作機制
一 海明碼的形成方式 1 首先海明碼是由資訊位和校驗位組成的 2 資訊位校驗位的關係 校驗位的位數r 資訊位的位數i 2 r 1 i r 3 校驗位的位置是2的整數次方 如 1 2 4 8 4 海明碼位數分組 因為海明碼其實是分組的奇偶校驗碼,所以有個分組的概念 1 1 3 5 7 2 2 3 6 ...
海明碼與海明距離
一,海明碼 1 傳輸的資料 1101 2 校驗位計算公式 2 k k n 1,n為資料位 在本例中計算的k為3 用p1,p2,p3,表示校驗位,其中 p1,的位數2 0,p2,的位數2 1,p3,的位數2 2則 1 21 2 41 4 2 41 2 4 位數的二進位制 0001 0010 0011 ...