Advertisement
StreetKatya

Hemming

May 22nd, 2023
779
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.84 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace kod
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Console.WriteLine("Введите код (из 0 и 1)");
  14.             string s = "";
  15.             string sk = "";
  16.             string primer = "";
  17.  
  18.             ConsoleKeyInfo key;
  19.  
  20.             do
  21.             {
  22.                 key = Console.ReadKey(true);
  23.                 switch (key.Key)
  24.                 {
  25.                     case ConsoleKey.Backspace:
  26.                         if (s.Length > 0)
  27.                         {
  28.                             s = s.Remove(s.Length - 1, 1);
  29.                             Console.Write(key.KeyChar + " " + key.KeyChar);
  30.                         }
  31.                         break;
  32.                     default:
  33.                         if ((key.KeyChar <= 49) && (key.KeyChar >= 48))
  34.                         {
  35.                             Console.Write(key.KeyChar);
  36.                             s += key.KeyChar;
  37.                         }
  38.                         break;
  39.                 }
  40.             }
  41.             while (key.KeyChar != 13);
  42.             Console.WriteLine("\n---------------------------");
  43.            
  44.             primer = s;
  45.             primer = primer.Insert(0, "X").Insert(1, "X");
  46.  
  47.             sk = s; // для вывода
  48.             s = s.Insert(0, "0").Insert(1, "0"); // вставка нулей в 0, 2^0
  49.             int numBit = 2; //отсчет начинается с двух, так как первый два бита мы уже добавили            
  50.  
  51.             for (int i = 4, j = 3; i < s.Length; i = (int)Math.Pow(2, j), j++)
  52.             {
  53.                 numBit++;
  54.                 s = s.Insert(i - 1, "0");
  55.                 primer = primer.Insert(i - 1, "X");
  56.             }
  57.             Console.WriteLine("Кол-во контрольных бит: {0} ", numBit);
  58.             Console.WriteLine(s);
  59.             Console.WriteLine(primer);
  60.  
  61.             //int[] sBoss = s.Select(ch => int.Parse(ch.ToString())).ToArray(); //массив из целых чисел
  62.             //char[] Boss = s.Select(ch => char.Parse(ch.ToString())).ToArray(); //массив из символов
  63.             //string[] str = s.Select(ch => (ch.ToString())).ToArray(); //массив из подстрок
  64.  
  65.             //Console.WriteLine("\nТеперь это массив");
  66.             //for (int i = 0; i < str.Length; i++)
  67.             //{
  68.             //    Console.WriteLine(" i:{0} /= {1}", i, str[i]);
  69.             //}
  70.  
  71.             Console.WriteLine();          
  72.  
  73.             string s1 = null, s2 = null, s3 = null, s4 = null, s5 = null;
  74.             int x = s.Length;
  75.  
  76.             for (int i = 0; i < s.Length / 2; i++)
  77.                 s1 += "0";
  78.             for (int i = 0; i < s.Length; i = i + 2)
  79.                 s1 = s1.Insert(i, "1");
  80.             Console.WriteLine(s1);
  81.  
  82.             if (numBit >= 1)
  83.             {
  84.                 for (int i = 0; i < s.Length / 2; i++)
  85.                     s2 += "0";
  86.                 for (int i = 1; i < s.Length; i = i + 4)
  87.                     s2 = s2.Insert(i, "11");
  88.                 if (s2.Length > s1.Length)
  89.                 {
  90.                     s2 = s2.Remove(s2.Length - 1);
  91.                 }
  92.                 else if (s2.Length < s1.Length)
  93.                 {
  94.                     s2 += "0";
  95.                 }
  96.                 Console.WriteLine(s2);
  97.             }
  98.             if (numBit >= 3) // это костыль костылей :)
  99.             {
  100.                 s3 = s;
  101.                 s3 = s3.Replace('1', '0');
  102.  
  103.                 for (int i = 3; i < s.Length; i = i + 8)
  104.                 {
  105.                         s3 = s3.Insert(i, "1111");
  106.                 }
  107.                 if (s3.Length > s2.Length)
  108.                 {
  109.                     int raznica = s3.Length - s2.Length;
  110.                     s3 = s3.Remove(s3.Length - raznica);
  111.                 }
  112.                 Console.WriteLine(s3);
  113.             }
  114.  
  115.             if (numBit >= 4) // это костыль костылей :)
  116.             {
  117.                 s4 = s;
  118.                 s4 = s4.Replace('1', '0');
  119.  
  120.                 for (int i = 7; i < s.Length; i = i + 16)
  121.                 {
  122.                     s4 = s4.Insert(i, "11111111");
  123.                 }
  124.                 if (s4.Length > s3.Length)
  125.                 {
  126.                     int raznica = s4.Length - s3.Length;
  127.                     s4 = s4.Remove(s4.Length - raznica);
  128.                 }
  129.                 Console.WriteLine(s4);
  130.             }
  131.  
  132.             if (numBit >= 5) // это костыль костылей :)
  133.             {
  134.                 s5 = s;
  135.                 s5 = s5.Replace('1', '0');
  136.  
  137.                 for (int i = 15; i < s.Length; i = i + 32)
  138.                 {
  139.                     s5 = s5.Insert(i, "1111111111111111");
  140.                 }
  141.                 if (s5.Length > s4.Length)
  142.                 {
  143.                     int raznica = s5.Length - s4.Length;
  144.                     s5 = s5.Remove(s5.Length - raznica);
  145.                 }
  146.                 Console.WriteLine(s5);
  147.             }
  148.            
  149.             int[] sBoss = s.Select(ch => int.Parse(ch.ToString())).ToArray(); //массив из целых чисел
  150.             int[] sBoss1 = new int[0];
  151.             int[] sBoss2 = new int[0];
  152.             int[] sBoss3 = new int[0];
  153.             int[] sBoss4 = new int[0];
  154.             int[] sBoss5 = new int[0];
  155.  
  156.             if (numBit > 0)
  157.             {
  158.                 sBoss1 = s1.Select(ch => int.Parse(ch.ToString())).ToArray();
  159.             }
  160.             if (numBit >= 1)
  161.             {
  162.                 sBoss2 = s2.Select(ch => int.Parse(ch.ToString())).ToArray();
  163.             }
  164.             if (numBit >= 3)
  165.             {
  166.                 sBoss3 = s3.Select(ch => int.Parse(ch.ToString())).ToArray();
  167.             }
  168.             if (numBit >= 4)
  169.             {
  170.                 sBoss4 = s4.Select(ch => int.Parse(ch.ToString())).ToArray();
  171.             }
  172.             if (numBit >= 5)
  173.             {
  174.                 sBoss5 = s5.Select(ch => int.Parse(ch.ToString())).ToArray();
  175.             }
  176.  
  177.             string[] tem = new string[numBit]; //для хранения r(x)
  178.  
  179.             int temp = 0;            
  180.             for (int i = 0; i < s.Length; i++)
  181.                 temp += sBoss[i] * sBoss1[i];
  182.             if (temp > 1)
  183.                 tem[0] = Convert.ToString(temp % 2);
  184.             else
  185.                 tem[0] = Convert.ToString(temp);
  186.             Console.WriteLine("r1 = {0} ", tem[0]);
  187.  
  188.             int temp2 = 0;
  189.             if (numBit >= 1)
  190.             {
  191.                 for (int i = 0; i < s.Length; i++)
  192.                     temp2 += sBoss[i] * sBoss2[i];
  193.                 if (temp2 > 1)
  194.                     tem[1] = Convert.ToString(temp2 % 2);
  195.                 else
  196.                     tem[1] = Convert.ToString(temp2);
  197.                 Console.WriteLine("r2 = {0} ", tem[1]);
  198.             }
  199.  
  200.             int temp3 = 0;
  201.             if (numBit >= 3)
  202.             {              
  203.                 for (int i = 0; i < s.Length; i++)
  204.                     temp3 += sBoss[i] * sBoss3[i];
  205.                 if (temp3 > 1)
  206.                     tem[2] = Convert.ToString(temp3 % 2);
  207.                 else
  208.                     tem[2] = Convert.ToString(temp3);
  209.                 Console.WriteLine("r3 = {0} ", tem[2]);
  210.             }
  211.  
  212.             int temp4 = 0;
  213.             if (numBit >= 4)
  214.             {
  215.                 for (int i = 0; i < s.Length; i++)
  216.                     temp4 += sBoss[i] * sBoss4[i];
  217.                 if (temp4 > 1)
  218.                     tem[3] = Convert.ToString(temp4 % 2);
  219.                 else
  220.                     tem[3] = Convert.ToString(temp4);
  221.                 Console.WriteLine("r4 = {0} ", tem[3]);
  222.             }
  223.  
  224.             int temp5 = 0;
  225.             if (numBit >= 5)
  226.             {
  227.                 for (int i = 0; i < s.Length; i++)
  228.                     temp5 += sBoss[i] * sBoss5[i];
  229.                 if (temp5 > 1)
  230.                     tem[4] = Convert.ToString(temp5 % 2);
  231.                 else
  232.                     tem[4] = Convert.ToString(temp5);
  233.                 Console.WriteLine("r5 = {0} ", tem[4]);
  234.             }
  235.  
  236.             for (int i = 1, j = 1, k = 0; i < sk.Length; i = (int)Math.Pow(2, j), j++, k++)
  237.             {
  238.                 sk = sk.Insert(i - 1, tem[k]);
  239.             }
  240.             Console.WriteLine(sk);
  241.  
  242.             s = "";
  243.             string was = "";
  244.             Console.WriteLine("\nВведите закодированный код: "); //декодирование
  245.             do
  246.             {
  247.                 key = Console.ReadKey(true);
  248.                 switch (key.Key)
  249.                 {
  250.                     case ConsoleKey.Backspace:
  251.                         if (s.Length > 0)
  252.                         {
  253.                             s = s.Remove(s.Length - 1, 1);
  254.                             Console.Write(key.KeyChar + " " + key.KeyChar);
  255.                         }
  256.                         break;
  257.                     default:
  258.                         if ((key.KeyChar <= 49) && (key.KeyChar >= 48))
  259.                         {
  260.                             Console.Write(key.KeyChar);
  261.                             s += key.KeyChar;
  262.                         }
  263.                         break;
  264.                 }
  265.             }
  266.             while (key.KeyChar != 13);
  267.             Console.WriteLine("\n---------------------------");
  268.             Console.WriteLine(s1);
  269.             Console.WriteLine(s2);
  270.             Console.WriteLine(s3);
  271.             Console.WriteLine(s4);
  272.             Console.WriteLine(s5);
  273.  
  274.             was = s;
  275.             int[] sBossDecode = s.Select(ch => int.Parse(ch.ToString())).ToArray(); //массив из целых чисел
  276.            
  277.             temp = 0;
  278.             for (int i = 0; i < s.Length; i++)
  279.                 temp += sBossDecode[i] * sBoss1[i];
  280.             if (temp > 1)
  281.                 tem[0] = Convert.ToString(temp % 2);
  282.             else
  283.                 tem[0] = Convert.ToString(temp);
  284.             Console.WriteLine("r1 = {0} ", tem[0]);
  285.  
  286.             if (numBit >= 1)
  287.             {
  288.                 temp2 = 0;
  289.                 for (int i = 0; i < s.Length; i++)
  290.                     temp2 += sBossDecode[i] * sBoss2[i];
  291.                 if (temp2 > 1)
  292.                     tem[1] = Convert.ToString(temp2 % 2);
  293.                 else
  294.                     tem[1] = Convert.ToString(temp2);
  295.                 Console.WriteLine("r2 = {0} ", tem[1]);
  296.             }
  297.  
  298.             if (numBit >= 3)
  299.             {
  300.                 temp3 = 0;
  301.                 for (int i = 0; i < s.Length; i++)
  302.                     temp3 += sBossDecode[i] * sBoss3[i];
  303.                 if (temp3 > 1)
  304.                     tem[2] = Convert.ToString(temp3 % 2);
  305.                 else
  306.                     tem[2] = Convert.ToString(temp3);
  307.                 Console.WriteLine("r3 = {0} ", tem[2]);
  308.             }
  309.  
  310.             if (numBit >= 4)
  311.             {
  312.                 temp4 = 0;
  313.                 for (int i = 0; i < s.Length; i++)
  314.                     temp4 += sBossDecode[i] * sBoss4[i];
  315.                 if (temp4 > 1)
  316.                     tem[3] = Convert.ToString(temp4 % 2);
  317.                 else
  318.                     tem[3] = Convert.ToString(temp4);
  319.                 Console.WriteLine("r4 = {0} ", tem[3]);
  320.             }
  321.  
  322.             if (numBit >= 5)
  323.             {
  324.                 temp5 = 0;
  325.                 for (int i = 0; i < s.Length; i++)
  326.                     temp5 += sBossDecode[i] * sBoss5[i];
  327.                 if (temp5 > 1)
  328.                     tem[4] = Convert.ToString(temp5 % 2);
  329.                 else
  330.                     tem[4] = Convert.ToString(temp5);
  331.                 Console.WriteLine("r5 = {0} ", tem[4]);
  332.             }
  333.  
  334.             int plus = 0;
  335.  
  336.             if (tem[0] != "0")
  337.                 plus += 1;
  338.             if (numBit >= 1)
  339.             {
  340.                 if (tem[1] != "0")
  341.                     plus += 2;
  342.             }
  343.             if (numBit >= 3)
  344.             {
  345.                 if (tem[2] != "0")
  346.                     plus += 4;
  347.             }
  348.             if (numBit >= 4)
  349.             {
  350.                 if (tem[3] != "0")
  351.                     plus += 8;
  352.             }
  353.             if (numBit >= 5)
  354.             {
  355.                 if (tem[4] != "0")
  356.                     plus += 16;
  357.             }
  358.  
  359.             Console.WriteLine("Ошибка на {0} позиции", plus);
  360.  
  361.             if (s[plus - 1] == '1')
  362.             {
  363.                 s = s.Remove(plus - 1, 1).Insert(plus - 1, "0");
  364.             }
  365.             else
  366.             {
  367.                 s = s.Remove(plus - 1, 1).Insert(plus - 1, "1");
  368.             }
  369.             Console.WriteLine("Было\n{0}", was);
  370.             Console.WriteLine("Стало\n{0}", s);
  371.  
  372.             Console.ReadKey();
  373.         }
  374.     }
  375. }
  376.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement