Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- char string[] = { "1101000" }, del[] = { "1011" }, ost[5];
- int pos=0,zero = 0,flag = 0;
- void Delenie() {
- if (flag == 1) zero = 0;
- if ((pos != 7&&zero!=3) || (ost[0] == '1')) {
- for (int i = 0; i < 4; i++)
- {
- if (ost[i] == del[i]) { ost[i] = '0'; }
- else ost[i] = '1';
- }
- }
- }
- void DelZero() {
- zero = 0;
- for (int i = 0; i < 3; i++) {//убирает незначащие нули
- if (ost[0] == '0' && (zero<7-pos))
- {
- for (int j = 0; j <= 3; j++)
- {
- ost[j] = ost[j + 1];
- }
- zero++;
- }
- else break;
- }
- }
- void AddCh() {
- while (strlen(ost) != 4 && pos <7) {
- ost[strlen(ost)] = string[pos++];
- }
- }
- void RightShift()
- {
- int tmp = string[6];
- for (int i = 6; i > 0; i--)
- {
- string[i] = string[i - 1];
- }
- string[0] = tmp;
- }
- void LeftShift()
- {
- int tmp = string[0];
- for (int i = 0; i < 6; i++)
- {
- string[i] = string[i + 1];
- }
- string[6] = tmp;
- }
- int main()
- {
- system("chcp 1251");
- printf("Для кодировки введите 0, для декодировки 1: ");
- int vib;
- scanf_s("%d", &vib);
- getchar();
- switch (vib)
- {
- case 0:
- flag = 1;
- printf("Введите сообщение: ");
- gets_s(string, 5);
- for (int i = 0; i < 3; i++)
- string[4 + i] = '0';
- for (int i = 0; i < 4; i++, pos++) { //delenie pervoe
- if (string[i] == del[i]) { ost[i] = '0'; }
- else ost[i] = '1';
- }
- do {
- DelZero();
- AddCh();
- Delenie();
- } while (pos < 7);
- for (int i = 0; i < 3; i++) {
- string[i + 4] = ost[i + 1];
- }
- printf("Закодированное сообщение: %s", string);
- _getch;
- break;
- /*декод*/
- case 1:
- int sdvig = 0;
- printf("Введите закодированное сообщение: ");
- gets_s(string, 8);
- while (strcmp(ost,"0001")) {
- pos = 0;
- for (int i = 0; i < 4; i++, pos++) { //delenie pervoe
- if (string[i] == del[i]) { ost[i] = '0'; }
- else ost[i] = '1';
- }
- do {
- DelZero();
- AddCh();
- Delenie();
- } while (pos < 7);
- if (!strcmp(ost, "0000")) { // нет ошибок
- printf("В сообщениии нет ошибок");
- string[4] = 0;
- printf("\nCообщение: %s", string);
- return 0;
- }
- if (!strcmp(ost, "0001") || !strcmp(ost, "001") || !strcmp(ost, "01") || !strcmp(ost, "1")) { // идём плюсовать
- break;
- }
- LeftShift();
- sdvig++;
- }
- char pust[] = { "001" };
- int npust = 2,nstring =6;
- for (int i = 0; i < 3; i++) { //складывает
- if (string[nstring - i] == pust[npust - i]) { string[nstring - i] = '0'; }
- else string[nstring - i] = '1';
- }
- for (int i = 0; i < sdvig; i++)
- {
- RightShift();
- }
- printf("Исправленное сообщение: %s", string);
- string[4] = 0;
- printf("\nCообщение: %s", string);
- break;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment