Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.04 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. const int rowsH = 8;
  5. const int columnsH = 16;
  6.  
  7. const int H[8][16] = {{0,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0},
  8.                        {1,0,0,0,1,1,1,1, 0,1,0,0,0,0,0,0},
  9.                        {0,0,0,1,0,1,1,1, 0,0,1,0,0,0,0,0},
  10.                        {1,0,1,1,1,0,1,1, 0,0,0,1,0,0,0,0},
  11.                        {0,1,1,0,0,0,1,1, 0,0,0,0,1,0,0,0},
  12.                        {1,1,0,1,1,1,0,1, 0,0,0,0,0,1,0,0},
  13.                        {1,1,1,0,0,1,0,1, 0,0,0,0,0,0,1,0},
  14.                        {0,0,1,0,1,1,1,0, 0,0,0,0,0,0,0,1}};
  15. const int G[8][16]{
  16.         {1,0,0,0,0,0,0,0, 0,1,0,1,0,1,1,0},
  17.         {0,1,0,0,0,0,0,0, 1,0,0,0,1,1,1,0},
  18.         {0,0,1,0,0,0,0,0, 1,0,0,1,1,0,1,1},
  19.         {0,0,0,1,0,0,0,0, 1,0,1,1,0,1,0,0},
  20.         {0,0,0,0,1,0,0,0, 1,1,0,1,0,1,0,1},
  21.         {0,0,0,0,0,1,0,0, 1,1,1,0,0,1,1,1},
  22.         {0,0,0,0,0,0,1,0, 1,1,1,1,1,0,0,1},
  23.         {0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,0}
  24. };
  25. std::vector<int> Generate(const int G[8][16],std::vector<int> msg){
  26.     std::vector<int> code = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  27.     for(int i = 0; i < 16; i++)
  28.     {
  29.         for ( int j = 0 ; j < 8 ; j ++ )
  30.         {
  31.             code[i] += G[j][i] * msg[j];
  32.         }
  33.         code[i] %= 2;
  34.     }
  35.     return  code;
  36. }
  37.  
  38. std::vector<int> Check(const int H[8][16], std::vector<int> code){
  39.     std::vector<int> result = {0,0,0,0,0,0,0,0};
  40.     for(int i = 0; i < 8; i++){
  41.         //code[i]=0;
  42.         for(int j = 0; j < 16; j++ ){
  43.             result[i] += H[i][j] * code[j];
  44.         }
  45.         result[i] %= 2;
  46.     }
  47.     return  result;
  48. }
  49.  
  50. void Change(std::vector<int> &code, int i) {
  51.     code[i]=(code[i])?0:1;
  52.  
  53. }
  54.  
  55. std::vector<int> Repair(std::vector<int> code){
  56.     std::vector<int> error = Check(H,code);
  57.     for(int i = 0; i < 16; i++){
  58.         bool isSame = false;
  59.         for(int j = 0; j < 8; j++)
  60.         {
  61.             if(error[j] == H[j][i]){
  62.                 isSame = true;
  63.             }
  64.             else {
  65.  
  66.                 isSame = false;
  67.                 break;
  68.             }
  69.         }
  70.         if(isSame){
  71.             Change(code,i);
  72.             return code;
  73.         }
  74.     }
  75.     for(int i=0;i<16;i++){
  76.         for(int j=0;j<16;j++){
  77.             for(int k=0;k<8;k++){
  78.                 if((H[k][i] ^ H[k][j]) != error[k]) {
  79.                     break;
  80.                 }
  81.                 if(k==8-1) {
  82.                     code[i]=(code[i])?0:1;
  83.                     code[j]=(code[j])?0:1;
  84.                     return code;
  85.                 }
  86.             }
  87.         }
  88.     }
  89.     return code;
  90. }
  91.  
  92. int main()
  93. {
  94.     std::vector<int> msg = {0,0,0,0,1,1,1,1};
  95.  
  96.     std::vector<int> r = Generate(G,msg);
  97.     for(int i = 0; i < r.size(); i++){
  98.         std::cout<< r[i];
  99.     }
  100.     r[2]=1;
  101.     r[1]=1;
  102.     r[0]=1;
  103.     std::vector<int> error = Check(H,r);
  104.     std::cout<<"\n";
  105.  
  106.     for(int i = 0; i < error.size(); i++){
  107.         std::cout<< error[i];
  108.     }
  109.     std::cout<<"\n";
  110.  
  111.     r = Repair(r);
  112.     for(int i = 0; i < r.size(); i++){
  113.         std::cout<< r[i];
  114.     }
  115.  
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement