Guest User

Untitled

a guest
Jul 16th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.64 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <iostream>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. using namespace std;
  7.  
  8. #define n 6
  9.  
  10. int main() {
  11. int a[4][10];
  12. int* str = new int[n];// массив с исходным сообщением
  13. int key1[6]={3,5,6,7,9,10};// номера битов исходной последовательности
  14. int key2[4]={1,2,4,8};// вектора контрольных сумм в закодированной последовательности
  15. int* b = new int[10];
  16. int* bt = new int[10];// массив для закодированной последовательности
  17. int* So = new int[4];
  18. int* bb = new int[10];
  19. int* bb2 = new int[10];
  20. int* bb3 = new int[10];
  21. int* bb4 = new int[10];
  22. int* beta = new int[10];
  23.  int* br = new int[10];
  24.  int i,j,k,l,r,sum,m;
  25.  
  26.  
  27.  cout << "Введите строку:" << endl;
  28.  for (i=0; i<n;i++)
  29.         cin>>str[i];
  30.  
  31.  cout << "Контрольная матрица" << endl;
  32.  cout << "i  ";
  33.  l = 1;
  34.  i = 1;
  35.  for(k =1; k<=10; k++){
  36.    if(k == key2[i-1]){
  37.      cout << ' '<< ' ';
  38.      i++;
  39.    }
  40.      else{
  41.        cout << l<< ' ';
  42.      l++;
  43.    }
  44.  }
  45.  cout << "\n";
  46.  
  47.  /* номера столбцов матрицы */
  48.  cout << "j  ";
  49.  for(j=1; j<=10; j++)
  50.    cout << j << ' ';
  51.  cout << "\n";
  52.  
  53.  
  54.  for(i=0;i<4;i++){
  55.    cout << "a" << i+1 << ' ';
  56.    for(j=0;j<10;j++){
  57.      r = pow(2,i);
  58.      a[i][j] = ((j + 1)/r)%2;
  59.  
  60.  
  61.      cout << a[i][j] << ' ';
  62.    }
  63.    cout << endl;
  64.  }
  65.  
  66.  /* заполняем b */
  67.  
  68.    l = 0;
  69.    i = 0;
  70.    for(k =1; k<=10; k++){
  71.      if(k == key1[l]){
  72.        b[i] =str[l];
  73.        l++;
  74.        i++;
  75.      }
  76.      else{
  77.        b[i] = 5;
  78.  
  79.        i++;
  80.  
  81.      }
  82.    }
  83.  
  84.    cout << "b  ";
  85.    for (i = 0; i<10; i++)
  86.  cout << b[i] << ' ';
  87.    cout << endl;
  88.  
  89.  
  90.  
  91.    /*получаем контрольные значения*/
  92.  
  93.    /* первое значение */
  94.  
  95.    k = 0;
  96.    i = 0;
  97.    for (j=0;j<6; j++){
  98.      if(a[i][key1[j]-1] == 1){
  99.        bb[k] = b[key1[j]-1];
  100.      k++;
  101.  
  102.      }
  103.   }
  104. So[0] = bb[0]^bb[1]^bb[2]^bb[3];
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  k = 0;
  111.    i = 1;
  112.    for (j=0;j<6; j++){
  113.      if(a[i][key1[j]-1] == 1){
  114.        bb2[k] = b[key1[j]-1];
  115.      k++;
  116.      }
  117.   }
  118.  
  119.    So[1] = bb2[0]^bb2[1]^bb2[2]^bb2[3];
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  k = 0;
  126.  i = 2;
  127.    for (j=0;j<6; j++){
  128.      if(a[i][key1[j]-1] == 1){
  129.   bb3[k] = b[key1[j]-1];
  130.      k++;
  131.      }
  132.   }
  133.  
  134.  
  135.      So[2] = bb3[0]^bb3[1]^bb3[2];
  136.  
  137.  
  138.  
  139.  k = 0;
  140.    i = 3;
  141.    for (j=0;j<6; j++){
  142.      if(a[i][key1[j]-1] == 1){
  143.        bb4[k] = b[key1[j]-1];
  144.      k++;
  145.      }
  146.   }
  147.  
  148.  
  149.   So[3] = bb4[0]^bb4[1];
  150.  /* формируем массив бэта*/
  151.    cout << "B  ";
  152.    l = 0;
  153.    i = 1;
  154.    for(k =1; k<=10; k++){
  155.      if(k == key2[i-1]){
  156.        beta[k-1] = So[l];
  157.        cout << beta[k-1]<< ' ';
  158.        l++;
  159.        i++;
  160.  
  161.      }
  162.      else{
  163.       beta[k-1] = 5;
  164.        cout << beta[k-1]<< ' ';
  165.  
  166.      }
  167.    }
  168.    cout << endl;
  169.  
  170.  
  171.  
  172.  /*формируем bt*/
  173.   l = 0;
  174.   i = 0;
  175.        for (k = 1; k <=10; k++){
  176.          if (k == key2[i]){
  177.            bt[k-1] = beta[l];
  178.  
  179.            i++;
  180.            l++;
  181.          }
  182.          else
  183.            {
  184.              bt[k-1] = b[l];
  185.              l++;
  186.            }
  187.            }
  188.  
  189.        cout << "bt ";
  190. for (i = 0; i<10; i++)
  191. cout << bt[i] << ' ';
  192. cout << endl;
  193.  cout << "So ";
  194.  for(i=0;i<4;i++)
  195.    cout << So[i] << ' ';
  196.  
  197.  cout << endl;
  198.  
  199.  cout << "Введите последовательность с ошибкой в одном бите" << endl;
  200.  for (i=0; i<10;i++)
  201.    cin>>br[i];
  202.  
  203.  for (i = 0; i < 10; i++)
  204.    if (bt[i] != br[i])
  205.     m = i+1;
  206.  
  207.  cout << "Ошибка в " << m << " позиции" << endl;
  208.  
  209.  
  210.  return 0;
  211.  
  212. }
Add Comment
Please, Sign In to add comment