Advertisement
N7Ved

Lab 3

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