Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- const int rowsH = 8;
- const int columnsH = 16;
- const int H[8][16] = {{0,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0},
- {1,0,0,0,1,1,1,1, 0,1,0,0,0,0,0,0},
- {0,0,0,1,0,1,1,1, 0,0,1,0,0,0,0,0},
- {1,0,1,1,1,0,1,1, 0,0,0,1,0,0,0,0},
- {0,1,1,0,0,0,1,1, 0,0,0,0,1,0,0,0},
- {1,1,0,1,1,1,0,1, 0,0,0,0,0,1,0,0},
- {1,1,1,0,0,1,0,1, 0,0,0,0,0,0,1,0},
- {0,0,1,0,1,1,1,0, 0,0,0,0,0,0,0,1}};
- const int G[8][16]{
- {1,0,0,0,0,0,0,0, 0,1,0,1,0,1,1,0},
- {0,1,0,0,0,0,0,0, 1,0,0,0,1,1,1,0},
- {0,0,1,0,0,0,0,0, 1,0,0,1,1,0,1,1},
- {0,0,0,1,0,0,0,0, 1,0,1,1,0,1,0,0},
- {0,0,0,0,1,0,0,0, 1,1,0,1,0,1,0,1},
- {0,0,0,0,0,1,0,0, 1,1,1,0,0,1,1,1},
- {0,0,0,0,0,0,1,0, 1,1,1,1,1,0,0,1},
- {0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,0}
- };
- std::vector<int> Generate(const int G[8][16],std::vector<int> msg){
- std::vector<int> code = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
- for(int i = 0; i < 16; i++)
- {
- for ( int j = 0 ; j < 8 ; j ++ )
- {
- code[i] += G[j][i] * msg[j];
- }
- code[i] %= 2;
- }
- return code;
- }
- std::vector<int> Check(const int H[8][16], std::vector<int> code){
- std::vector<int> result = {0,0,0,0,0,0,0,0};
- for(int i = 0; i < 8; i++){
- //code[i]=0;
- for(int j = 0; j < 16; j++ ){
- result[i] += H[i][j] * code[j];
- }
- result[i] %= 2;
- }
- return result;
- }
- void Change(std::vector<int> &code, int i) {
- code[i]=(code[i])?0:1;
- }
- std::vector<int> Repair(std::vector<int> code){
- std::vector<int> error = Check(H,code);
- for(int i = 0; i < 16; i++){
- bool isSame = false;
- for(int j = 0; j < 8; j++)
- {
- if(error[j] == H[j][i]){
- isSame = true;
- }
- else {
- isSame = false;
- break;
- }
- }
- if(isSame){
- Change(code,i);
- return code;
- }
- }
- for(int i=0;i<16;i++){
- for(int j=0;j<16;j++){
- for(int k=0;k<8;k++){
- if((H[k][i] ^ H[k][j]) != error[k]) {
- break;
- }
- if(k==8-1) {
- code[i]=(code[i])?0:1;
- code[j]=(code[j])?0:1;
- return code;
- }
- }
- }
- }
- return code;
- }
- int main()
- {
- std::vector<int> msg = {0,0,0,0,1,1,1,1};
- std::vector<int> r = Generate(G,msg);
- for(int i = 0; i < r.size(); i++){
- std::cout<< r[i];
- }
- r[2]=1;
- r[1]=1;
- r[0]=1;
- std::vector<int> error = Check(H,r);
- std::cout<<"\n";
- for(int i = 0; i < error.size(); i++){
- std::cout<< error[i];
- }
- std::cout<<"\n";
- r = Repair(r);
- for(int i = 0; i < r.size(); i++){
- std::cout<< r[i];
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement