Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- #include <stdlib.h>
- int main()
- {
- char first_str[100];
- int kontr_bit = 0;
- char kontr_bit_1[10];
- char kontr_bit_2[10];
- printf_s("Enter the string to encode: \n");
- gets_s(first_str);
- // -------------- КОДИРОВАНИЕ ------------------
- // расстановка контр.бит
- for (int i = 0; i < strlen(first_str); i++)
- {
- if (i == 0 || i == 1 || i == 3 || i == 7 || i == 15 || i == 31 || i == 63)
- {
- for (int j = strlen(first_str) + 1; j > i; j--)
- first_str[j] = first_str[j - 1];
- first_str[i] = '0';
- kontr_bit++;
- }
- }
- // вычисление контр.бит
- for (int i = 0; i < kontr_bit; i++)
- {
- int count = 0;
- for (int j = pow(2, i) - 1; j < strlen(first_str); j = j + 2 * pow(2, i))
- {
- for (int k = j; k < j + pow(2, i); k++)
- {
- if (first_str[k] == '1')
- count++;
- }
- }
- if (count % 2 == 0)
- first_str[(int)pow(2, i) - 1] = '0';
- else
- first_str[(int)pow(2, i) - 1] = '1';
- }
- printf_s("Encoded message: \n");
- printf_s("%s\n", first_str);
- // -------------- ДЕКОДИРОВАНИЕ ------------------
- char second_str[100];
- printf_s("Enter the transmitted message: \n");
- gets_s(second_str);
- int j = 0;
- kontr_bit = 0;
- // берем из полученной контр.биты
- for (int i = 0; i < strlen(second_str); i++)
- {
- if (i == 0 || i == 1 || i == 3 || i == 7 || i == 15 || i == 31 || i == 63)
- {
- kontr_bit_1[j] = second_str[i];
- j++;
- kontr_bit++;
- }
- }
- kontr_bit_1[j] = '\0';
- // зануляем конрт.бит
- for (int i = 0; i < strlen(second_str); i++)
- {
- if (i == 0 || i == 1 || i == 3 || i == 7 || i == 15 || i == 31 || i == 63)
- {
- second_str[i] = '0';
- }
- }
- // вычисление контр.бит
- j = 0;
- for (int i = 0; i < kontr_bit; i++)
- {
- int count = 0;
- for (int j = pow(2, i) - 1; j < strlen(second_str); j = j + 2 * pow(2, i))
- {
- for (int k = j; k < j + pow(2, i); k++)
- {
- if (second_str[k] == '1')
- count++;
- }
- }
- if (count % 2 == 0)
- second_str[(int)pow(2, i) - 1] = '0';
- else
- second_str[(int)pow(2, i) - 1] = '1';
- kontr_bit_2[j] = second_str[(int)pow(2, i) - 1];
- j++;
- }
- kontr_bit_2[j] = '\0';
- // исправление ошибки
- int sum = 0;
- for (int i = 0; i < kontr_bit; i++) {
- if (kontr_bit_1[i] != kontr_bit_2[i])
- sum += pow(2, i);
- }
- if (second_str[sum - 1] == '1')
- second_str[sum - 1] = '0';
- else
- second_str[sum - 1] = '1';
- // удаление контр.бит
- int y = 0;
- for (int i = 0; i < strlen(second_str); i++)
- {
- if (i == 0 - y || i == 1 - y || i == 3 - y || i == 7 - y || i == 15 - y || i == 31 - y || i == 63 - y)
- {
- for (int j = i; j < strlen(second_str) + 1; j++)
- second_str[j] = second_str[j + 1];
- y++;
- }
- second_str[strlen(second_str)] = '\0';
- }
- for (int i = 0; i < strlen(second_str); i++) {
- second_str[i] = second_str[i + 1];
- }
- printf_s("Decoded message: \n");
- printf_s("%s", second_str);
- int x = 0;
- scanf_s("%d", &x);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement