Advertisement
mrAnderson33

Задания из перавой лабы по крипте(1.1-1.8)

Jun 18th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.48 KB | None | 0 0
  1. using System;
  2.  
  3. namespace HomeWork1Kripta
  4. {
  5.     class Tasks
  6.     {
  7.         delegate void func();
  8.  
  9.         private Delegate[] Actions = new func[]
  10.         {
  11.             ()=>
  12.             {
  13.                 Console.WriteLine("1) Введите 32-разрядное число в двоичной сс");
  14.                 int number = Convert.ToInt32(Console.ReadLine(), 2);
  15.                 Console.WriteLine("Введите номер бита, который хотите увидеть");
  16.                 int j = Convert.ToInt32(Console.ReadLine());
  17.                 int iBit = ((1 << j) & number) >> j;
  18.                 Console.WriteLine($"{j}-ый бит = {iBit}");
  19.                 if(iBit == 0) Console.WriteLine($"2) Установка {j}-ого бита {Convert.ToString((1 << j) | number,2)}");
  20.                 if(iBit == 1) Console.WriteLine($"2) Снятие {j}-ого бита {Convert.ToString(~(1 << j) & number,2)}");
  21.  
  22.                 Console.WriteLine("3) Введите номер i бита для перестановки ");
  23.                 int i = Convert.ToInt32(Console.ReadLine()) ;
  24.                 Console.WriteLine("Введите номер j бита для перестановки ");
  25.                 j = Convert.ToInt32(Console.ReadLine()) ;
  26.                 int withoutIJbits = number & (-1 ^ ((1 << i) | (1 << j)));
  27.                 iBit = ((1 << i) & number) >> i;
  28.                 int jBit = ((1 << j) & number) >> j;
  29.                 int res = (iBit << j) | (jBit << i) | withoutIJbits;
  30.                 Console.WriteLine($"Смена местами {i}-ого и {j}-ого бит {Convert.ToString(res,2)}");
  31.                 Console.WriteLine("4) Введите m бит которые хотите обнулить");
  32.                 int m = Convert.ToInt32(Console.ReadLine());
  33.                 Console.WriteLine($"Обнуление младших {m} бит {Convert.ToString(((-1) << m) & number,2)}");
  34.             },
  35.             ()=>
  36.             {
  37.                 Console.WriteLine("Введите 32-разрядное число в двоичной сс");
  38.                 var num = Convert.ToInt32(Console.ReadLine(), 2);
  39.                 Console.WriteLine("Введите его длину");
  40.                 var len = Convert.ToInt32(Console.ReadLine());
  41.                 Console.WriteLine("Введите количество битов i:");
  42.                 var i = Convert.ToInt32(Console.ReadLine());
  43.                 Console.WriteLine("Введите количество битов j:");
  44.                 var j = Convert.ToInt32(Console.ReadLine());
  45.                 int res = ((num >> len - i) << i) | ((~((-1) << i)) & num);
  46.                 Console.WriteLine($"А)Склеенные первые {i} бит  и последние {j} бит: {Convert.ToString(res,2)}");
  47.                 res = (((~((-1) << (len - i))) & num) & ((-1) << i)) >> i;
  48.                 Console.WriteLine($"Б) биты между первым  {i} битом  и последним {j} битом: {Convert.ToString(res,2)}");
  49.             },
  50.             ()=>
  51.             {
  52.                 Console.WriteLine("Введите 32-разрядное");
  53.                 var num = Convert.ToInt32(Console.ReadLine(),2);
  54.                 Console.WriteLine(Convert.ToString(num,2));
  55.                 Console.WriteLine("Введите перестановки через пробел");
  56.                 var changesInChars = Console.ReadLine().Split(' ');
  57.                 var changes = new int[changesInChars.Length];
  58.                 for(int i =0; i <changes.Length;++i) int.TryParse(changesInChars[i],out changes[i]);
  59.                 int result = 0;
  60.                 for (int i = 0; i < 4; i++)
  61.                 {
  62.                  result |= (int)(((num & (( (Int64)1 << (8 * (i + 1))) - 1)) >> (8 * (i))) << (8 * changes[i]));
  63.                 }
  64.                 Console.WriteLine($"Смена байтов местами : {Convert.ToString(result,2)}");
  65.             },
  66.             ()=>
  67.             {
  68.                 Console.WriteLine("Введите число:");
  69.                 var num = Convert.ToInt32(Console.ReadLine());
  70.                 int res = num & -num;
  71.                 Console.WriteLine($"Максимальная степень двойки числа {num} = {res}");
  72.             },
  73.            ()=>
  74.            {
  75.             Console.WriteLine("Введите число:");
  76.             var num = Convert.ToInt32(Console.ReadLine());  
  77.             int result = -1;
  78.             for(int numCopy = num; numCopy>0; numCopy>>=1)result++;
  79.             Console.WriteLine($"Число p={result}  2^{result}<={num}<=2^{result+1}");
  80.            },
  81.            ()=>
  82.            {
  83.                Console.WriteLine("Введите 32-разрядное число в двоичной сс");
  84.                var num = Convert.ToInt32(Console.ReadLine(), 2);
  85.                string tempSTR = Convert.ToString(num, 2);
  86.                int result = tempSTR[0]=='1' ? 1 : 0;
  87.                for (int i = 1; i < tempSTR.Length; i++)
  88.                 {
  89.                     result ^= tempSTR[i] == '1' ? 1 : 0;
  90.                 }
  91.                Console.WriteLine($"{Convert.ToString(num,2)}->{result}");
  92.                //6
  93.            },
  94.            ()=>
  95.            {
  96.                //7
  97.                //Console.WriteLine("Введите число p:");
  98.                Console.WriteLine("Введите число");
  99.                var num = Convert.ToInt32(Console.ReadLine(),2);
  100.                Console.WriteLine("Введите число n,на которое хотите сдвинуть:");
  101.                var n = Convert.ToInt32(Console.ReadLine());
  102.                int p = -1;
  103.                for(int numCopy = num; numCopy>0; numCopy>>=1)p++;
  104.            //    Console.WriteLine($"{Convert.ToString(num,2)}");
  105.                p++;
  106.  
  107.                int res = (num >> n) | ((~(-1 << (n)) & num) << p-n);
  108.                Console.WriteLine($"Циклический сдвиг вправо на {n} бит: {Convert.ToString(res,2)}");
  109.                res= ((num << n) & ~(-1 << p)) | (((-1 << p - n) & num) >> (p-n));
  110.                Console.WriteLine($"Циклический сдвиг влево на {n} бит: {Convert.ToString(res,2)}");
  111.            },
  112.            ()=>
  113.            {
  114.                Console.WriteLine("Введите число:");
  115.                var num = Convert.ToInt32(Console.ReadLine(),2);
  116.                Console.WriteLine("Введите перестановки через пробел");
  117.                var changesInChars = Console.ReadLine().Split(' ');
  118.                var changes = new int[changesInChars.Length];
  119.                for(int i =0; i <changes.Length;++i) int.TryParse(changesInChars[i],out changes[i]);
  120.  
  121.                int p = -1;
  122.                for(int numCopy = num; numCopy>0; numCopy>>=1)p++;
  123.                p++;
  124.                int result = 0;
  125.                if (p==changes.Length)
  126.                     {
  127.                         for (int i = 0; i < p; i++)
  128.                         {
  129.                             result |= (((1 << i) & num) >> i) << ((p-1) - changes[i]);
  130.                         }
  131.                         Console.WriteLine($"{Convert.ToString(result,2)}");
  132.                     }
  133.                else
  134.                 {
  135.                     throw new Exception("different sizes");
  136.                 }
  137.                
  138.                //8
  139.            }
  140.         };
  141.  
  142.         public  Delegate this[int index]
  143.         {
  144.            get => Actions[index];
  145.         }
  146.        
  147.  
  148.     }
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement