Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <iostream>
- #include <string.h>
- #include <math.h>
- using namespace std;
- #define n 6
- int main() {
- int a[4][10];
- int* str = new int[n];// массив с исходным сообщением
- int key1[6]={3,5,6,7,9,10};// номера битов исходной последовательности
- int key2[4]={1,2,4,8};// вектора контрольных сумм в закодированной последовательности
- int* b = new int[10];
- int* bt = new int[10];// массив для закодированной последовательности
- int* So = new int[4];
- int* bb = new int[10];
- int* bb2 = new int[10];
- int* bb3 = new int[10];
- int* bb4 = new int[10];
- int* beta = new int[10];
- int* br = new int[10];
- int i,j,k,l,r,sum,m;
- cout << "Введите строку:" << endl;
- for (i=0; i<n;i++)
- cin>>str[i];
- cout << "Контрольная матрица" << endl;
- cout << "i ";
- l = 1;
- i = 1;
- for(k =1; k<=10; k++){
- if(k == key2[i-1]){
- cout << ' '<< ' ';
- i++;
- }
- else{
- cout << l<< ' ';
- l++;
- }
- }
- cout << "\n";
- /* номера столбцов матрицы */
- cout << "j ";
- for(j=1; j<=10; j++)
- cout << j << ' ';
- cout << "\n";
- for(i=0;i<4;i++){
- cout << "a" << i+1 << ' ';
- for(j=0;j<10;j++){
- r = pow(2,i);
- a[i][j] = ((j + 1)/r)%2;
- cout << a[i][j] << ' ';
- }
- cout << endl;
- }
- /* заполняем b */
- l = 0;
- i = 0;
- for(k =1; k<=10; k++){
- if(k == key1[l]){
- b[i] =str[l];
- l++;
- i++;
- }
- else{
- b[i] = 5;
- i++;
- }
- }
- cout << "b ";
- for (i = 0; i<10; i++)
- cout << b[i] << ' ';
- cout << endl;
- /*получаем контрольные значения*/
- /* первое значение */
- k = 0;
- i = 0;
- for (j=0;j<6; j++){
- if(a[i][key1[j]-1] == 1){
- bb[k] = b[key1[j]-1];
- k++;
- }
- }
- So[0] = bb[0]^bb[1]^bb[2]^bb[3];
- k = 0;
- i = 1;
- for (j=0;j<6; j++){
- if(a[i][key1[j]-1] == 1){
- bb2[k] = b[key1[j]-1];
- k++;
- }
- }
- So[1] = bb2[0]^bb2[1]^bb2[2]^bb2[3];
- k = 0;
- i = 2;
- for (j=0;j<6; j++){
- if(a[i][key1[j]-1] == 1){
- bb3[k] = b[key1[j]-1];
- k++;
- }
- }
- So[2] = bb3[0]^bb3[1]^bb3[2];
- k = 0;
- i = 3;
- for (j=0;j<6; j++){
- if(a[i][key1[j]-1] == 1){
- bb4[k] = b[key1[j]-1];
- k++;
- }
- }
- So[3] = bb4[0]^bb4[1];
- /* формируем массив бэта*/
- cout << "B ";
- l = 0;
- i = 1;
- for(k =1; k<=10; k++){
- if(k == key2[i-1]){
- beta[k-1] = So[l];
- cout << beta[k-1]<< ' ';
- l++;
- i++;
- }
- else{
- beta[k-1] = 5;
- cout << beta[k-1]<< ' ';
- }
- }
- cout << endl;
- /*формируем bt*/
- l = 0;
- i = 0;
- for (k = 1; k <=10; k++){
- if (k == key2[i]){
- bt[k-1] = beta[l];
- i++;
- l++;
- }
- else
- {
- bt[k-1] = b[l];
- l++;
- }
- }
- cout << "bt ";
- for (i = 0; i<10; i++)
- cout << bt[i] << ' ';
- cout << endl;
- cout << "So ";
- for(i=0;i<4;i++)
- cout << So[i] << ' ';
- cout << endl;
- cout << "Введите последовательность с ошибкой в одном бите" << endl;
- for (i=0; i<10;i++)
- cin>>br[i];
- for (i = 0; i < 10; i++)
- if (bt[i] != br[i])
- m = i+1;
- cout << "Ошибка в " << m << " позиции" << endl;
- return 0;
- }
Add Comment
Please, Sign In to add comment