Advertisement
Guest User

Untitled

a guest
Jan 18th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. int main()
  7. {
  8. char first_str[100];
  9. int kontr_bit = 0;
  10. char kontr_bit_1[10];
  11. char kontr_bit_2[10];
  12.  
  13. printf_s("Enter the string to encode: \n");
  14. gets_s(first_str);
  15.  
  16. // -------------- КОДИРОВАНИЕ ------------------
  17.  
  18. // расстановка контр.бит
  19. for (int i = 0; i < strlen(first_str); i++)
  20. {
  21. if (i == 0 || i == 1 || i == 3 || i == 7 || i == 15 || i == 31 || i == 63)
  22. {
  23. for (int j = strlen(first_str) + 1; j > i; j--)
  24. first_str[j] = first_str[j - 1];
  25. first_str[i] = '0';
  26. kontr_bit++;
  27. }
  28. }
  29.  
  30. // вычисление контр.бит
  31. for (int i = 0; i < kontr_bit; i++)
  32. {
  33. int count = 0;
  34. for (int j = pow(2, i) - 1; j < strlen(first_str); j = j + 2 * pow(2, i))
  35. {
  36. for (int k = j; k < j + pow(2, i); k++)
  37. {
  38. if (first_str[k] == '1')
  39. count++;
  40. }
  41. }
  42. if (count % 2 == 0)
  43. first_str[(int)pow(2, i) - 1] = '0';
  44. else
  45. first_str[(int)pow(2, i) - 1] = '1';
  46. }
  47. printf_s("Encoded message: \n");
  48. printf_s("%s\n", first_str);
  49.  
  50.  
  51. // -------------- ДЕКОДИРОВАНИЕ ------------------
  52.  
  53. char second_str[100];
  54. printf_s("Enter the transmitted message: \n");
  55. gets_s(second_str);
  56.  
  57. int j = 0;
  58. kontr_bit = 0;
  59. // берем из полученной контр.биты
  60. for (int i = 0; i < strlen(second_str); i++)
  61. {
  62. if (i == 0 || i == 1 || i == 3 || i == 7 || i == 15 || i == 31 || i == 63)
  63. {
  64. kontr_bit_1[j] = second_str[i];
  65. j++;
  66. kontr_bit++;
  67. }
  68. }
  69. kontr_bit_1[j] = '\0';
  70.  
  71. // зануляем конрт.бит
  72. for (int i = 0; i < strlen(second_str); i++)
  73. {
  74. if (i == 0 || i == 1 || i == 3 || i == 7 || i == 15 || i == 31 || i == 63)
  75. {
  76. second_str[i] = '0';
  77. }
  78. }
  79.  
  80. // вычисление контр.бит
  81. j = 0;
  82. for (int i = 0; i < kontr_bit; i++)
  83. {
  84. int count = 0;
  85. for (int j = pow(2, i) - 1; j < strlen(second_str); j = j + 2 * pow(2, i))
  86. {
  87. for (int k = j; k < j + pow(2, i); k++)
  88. {
  89. if (second_str[k] == '1')
  90. count++;
  91. }
  92. }
  93. if (count % 2 == 0)
  94. second_str[(int)pow(2, i) - 1] = '0';
  95. else
  96. second_str[(int)pow(2, i) - 1] = '1';
  97. kontr_bit_2[j] = second_str[(int)pow(2, i) - 1];
  98. j++;
  99. }
  100. kontr_bit_2[j] = '\0';
  101.  
  102. // исправление ошибки
  103. int sum = 0;
  104. for (int i = 0; i < kontr_bit; i++) {
  105. if (kontr_bit_1[i] != kontr_bit_2[i])
  106. sum += pow(2, i);
  107. }
  108. if (second_str[sum - 1] == '1')
  109. second_str[sum - 1] = '0';
  110. else
  111. second_str[sum - 1] = '1';
  112.  
  113. // удаление контр.бит
  114. int y = 0;
  115. for (int i = 0; i < strlen(second_str); i++)
  116. {
  117. if (i == 0 - y || i == 1 - y || i == 3 - y || i == 7 - y || i == 15 - y || i == 31 - y || i == 63 - y)
  118. {
  119. for (int j = i; j < strlen(second_str) + 1; j++)
  120. second_str[j] = second_str[j + 1];
  121. y++;
  122. }
  123. second_str[strlen(second_str)] = '\0';
  124. }
  125. for (int i = 0; i < strlen(second_str); i++) {
  126. second_str[i] = second_str[i + 1];
  127. }
  128. printf_s("Decoded message: \n");
  129. printf_s("%s", second_str);
  130.  
  131.  
  132.  
  133. int x = 0;
  134. scanf_s("%d", &x);
  135.  
  136. return 0;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement