N7Ved

Лабораторная работа №3 Final

Dec 18th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. char string[] = { "1101000" }, del[] = { "1011" }, ost[5];
  6. int pos=0,zero = 0,flag = 0;
  7.  
  8.  
  9. void Delenie() {
  10.     if (flag == 1) zero = 0;
  11.     if ((pos != 7&&zero!=3) || (ost[0] == '1')) {
  12.        
  13.         for (int i = 0; i < 4; i++)
  14.         {
  15.  
  16.             if (ost[i] == del[i]) { ost[i] = '0'; }
  17.             else ost[i] = '1';
  18.         }
  19.     }
  20.    
  21. }
  22.  
  23. void DelZero() {
  24.     zero = 0;
  25.         for (int i = 0; i < 3; i++) {//убирает незначащие нули
  26.             if (ost[0] == '0' && (zero<7-pos))
  27.             {
  28.                 for (int j = 0; j <= 3; j++)
  29.                 {
  30.                     ost[j] = ost[j + 1];
  31.                 }
  32.                 zero++;
  33.             }
  34.             else break;
  35.         }
  36.    
  37. }
  38.  
  39. void AddCh() {
  40.     while (strlen(ost) != 4 && pos <7) {
  41.         ost[strlen(ost)] = string[pos++];
  42.     }
  43. }
  44.  
  45. void RightShift()
  46. {
  47.     int tmp = string[6];
  48.  
  49.     for (int i = 6; i > 0; i--)
  50.     {
  51.         string[i] = string[i - 1];
  52.     }
  53.     string[0] = tmp;
  54.  
  55. }
  56.  
  57. void LeftShift()
  58. {
  59.     int tmp = string[0];
  60.  
  61.     for (int i = 0; i < 6; i++)
  62.     {
  63.         string[i] = string[i + 1];
  64.     }
  65.     string[6] = tmp;
  66.  
  67. }
  68.  
  69. int main()
  70. {
  71.     system("chcp 1251");
  72.     printf("Для кодировки введите 0, для декодировки 1: ");
  73.     int vib;
  74.     scanf_s("%d", &vib);
  75.     getchar();
  76.     switch (vib)
  77.     {
  78.     case 0:
  79.         flag = 1;
  80.         printf("Введите сообщение: ");
  81.         gets_s(string, 5);
  82.         for (int i = 0; i < 3; i++)
  83.             string[4 + i] = '0';
  84.         for (int i = 0; i < 4; i++, pos++) { //delenie pervoe
  85.             if (string[i] == del[i]) { ost[i] = '0'; }
  86.             else ost[i] = '1';
  87.         }
  88.  
  89.         do {
  90.             DelZero();
  91.             AddCh();
  92.             Delenie();
  93.         } while (pos < 7);
  94.  
  95.         for (int i = 0; i < 3; i++) {
  96.             string[i + 4] = ost[i + 1];
  97.         }
  98.         printf("Закодированное сообщение: %s", string);
  99.         _getch;
  100.         break;
  101.                  /*декод*/
  102.     case 1:
  103.         int sdvig = 0;
  104.         printf("Введите закодированное сообщение: ");
  105.         gets_s(string, 8);
  106.         while (strcmp(ost,"0001")) {
  107.             pos = 0;
  108.             for (int i = 0; i < 4; i++, pos++) { //delenie pervoe
  109.                 if (string[i] == del[i]) { ost[i] = '0'; }
  110.                 else ost[i] = '1';
  111.             }
  112.    
  113.             do {
  114.                 DelZero();
  115.                 AddCh();
  116.                 Delenie();
  117.             } while (pos < 7);
  118.             if (!strcmp(ost, "0000")) { // нет ошибок
  119.                 printf("В сообщениии нет ошибок");
  120.                 string[4] = 0;
  121.                 printf("\nCообщение: %s", string);
  122.                 return 0;
  123.             }
  124.             if (!strcmp(ost, "0001") || !strcmp(ost, "001") || !strcmp(ost, "01") || !strcmp(ost, "1")) { // идём плюсовать
  125.                 break;
  126.             }
  127.             LeftShift();
  128.             sdvig++;
  129.         }
  130.  
  131.         char pust[] = { "001" };
  132.         int npust = 2,nstring =6;
  133.         for (int i = 0; i < 3; i++) { //складывает
  134.             if (string[nstring - i] == pust[npust - i]) { string[nstring - i] = '0'; }
  135.             else string[nstring - i] = '1';
  136.         }
  137.  
  138.         for (int i = 0; i < sdvig; i++)
  139.         {
  140.             RightShift();
  141.         }
  142.  
  143.         printf("Исправленное сообщение: %s", string);
  144.         string[4] = 0;
  145.         printf("\nCообщение: %s", string);
  146.         break;
  147.     }
  148.     return 0;
  149. }
Add Comment
Please, Sign In to add comment