Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
337
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.66 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3.  
  4. namespace EKR_Sample
  5. {
  6.     class MainClass
  7.     {
  8.         static readonly Random rnd = new Random();
  9.         static readonly string path = "Log.txt";
  10.  
  11.         public static void Logger(string log)
  12.         {
  13.             try
  14.             {
  15.                 File.AppendAllText(path, log + Environment.NewLine);
  16.             }
  17.             catch (IOException)
  18.             {
  19.                 Console.WriteLine($"При логировании сообщения: \"{log}\" " +
  20.                     $"произошла ошибка");
  21.             }
  22.         }
  23.  
  24.         public static int ReadInt(string info, int left, int right)
  25.         {
  26.             int n;
  27.             while (true)
  28.             {
  29.                 try
  30.                 {
  31.                     Console.WriteLine(info);
  32.                     string str = Console.ReadLine();
  33.  
  34.                     Logger("Запрос на ввод: " + info);
  35.                     Logger("Результат: " + str);
  36.  
  37.                     n = int.Parse(str);
  38.                     if (n < left || n > right)
  39.                         throw new ArgumentException();
  40.                     break;
  41.                 }
  42.                 catch (ArgumentNullException)
  43.                 {
  44.                     Console.WriteLine("Empty");
  45.                     Logger("Empty");
  46.                 }
  47.                 catch (ArgumentException)
  48.                 {
  49.                     Console.WriteLine($"Number must be in [{left};{right}]");
  50.                     Logger($"Number must be in [{left};{right}]");
  51.                 }
  52.                 catch (OverflowException)
  53.                 {
  54.                     Console.WriteLine($"Number must be in [{left};{right}]");
  55.                     Logger($"Number must be in [{left};{right}]");
  56.                 }
  57.                 catch (FormatException)
  58.                 {
  59.                     Console.WriteLine("Not a number");
  60.                     Logger("Not a number");
  61.                 }
  62.             }
  63.             return n;
  64.         }
  65.  
  66.         public static char ReadChar(string info, char left, char right)
  67.         {
  68.             char n;
  69.             while (true)
  70.             {
  71.                 try
  72.                 {
  73.                     Console.WriteLine(info);
  74.                     string str = Console.ReadLine();
  75.  
  76.                     Logger("Запрос на ввод: " + info);
  77.                     Logger("Результат: " + str);
  78.  
  79.                     if (str.Length != 1)
  80.                         throw new ArgumentException();
  81.                     n = str[0];
  82.                     if (n < left || n > right)
  83.                         throw new ArgumentException();
  84.                     break;
  85.                 }
  86.                 catch (ArgumentNullException)
  87.                 {
  88.                     Console.WriteLine("Empty");
  89.                     Logger("Empty");
  90.                 }
  91.                 catch (ArgumentException)
  92.                 {
  93.                     Console.WriteLine($"Char must be in [{left};{right}]");
  94.                     Logger($"Char must be in [{left};{right}]");
  95.                 }
  96.                
  97.             }
  98.             return n;
  99.         }
  100.  
  101.         public static void RunCommon(char[] chArr)
  102.         {
  103.             try
  104.             {
  105.                 char common = CommonlyOccurringChar(chArr);
  106.                 Console.WriteLine("Самый частый элемент: " + common);
  107.                 Logger("Самый частый элемент: " + common);
  108.             }
  109.             catch (ArgumentException ex)
  110.             {
  111.                 Console.WriteLine("При нахождении самого частого элемента возникла ошибка: "
  112.                     + ex.Message);
  113.                 Logger("При нахождении самого частого элемента возникла ошибка: "
  114.                     + ex.Message);
  115.             }
  116.         }
  117.  
  118.         public static void RunK(char[] chArr)
  119.         {
  120.             int k = ReadInt("Введите k: ", 1, 26);
  121.            
  122.             try
  123.             {
  124.                 char[] kCh = kChar(chArr, k);
  125.                 string ans = String.Join(" ", kCh);
  126.  
  127.                 Console.WriteLine("Элементы, кратные k: " + ans);
  128.                 Logger("Элементы, кратные k: " + ans);
  129.             }
  130.             catch (ArgumentException ex)
  131.             {
  132.                 Console.WriteLine("При нахождении элементнов, кратных k возникла ошибка: "
  133.                     + ex.Message);
  134.                 Logger("При нахождении элементнов, кратных k возникла ошибка: "
  135.                     + ex.Message);
  136.             }
  137.         }
  138.  
  139.         public static void RunInterval(char[] chArr)
  140.         {
  141.             char ch1 = ReadChar("Введите ch1: ", 'a', 'z');
  142.             char ch2 = ReadChar("Введите ch2: ", 'a', 'z');
  143.             if (ch1 >= ch2)
  144.             {
  145.                 Console.WriteLine("ch1 в алфавите правее, чем ch2");
  146.                 Logger("ch1 в алфавите правее, чем ch2");
  147.             }
  148.             else
  149.             {
  150.                 try
  151.                 {
  152.                     char[] charInterval = GetCharsInInterval(chArr, ch1, ch2);
  153.                     Console.WriteLine(String.Join(" ", charInterval));
  154.                     Logger(String.Join(" ", charInterval));
  155.                 }
  156.                 catch (ArgumentException ex)
  157.                 {
  158.                     Console.WriteLine("При нахождении элементнов в интервале: "
  159.                         + ex.Message);
  160.                     Logger("При нахождении элементнов в интервале: "
  161.                         + ex.Message);
  162.                 }
  163.             }
  164.         }
  165.  
  166.         public static void RunCounter(char[] chArr)
  167.         {
  168.             try
  169.             {
  170.                 int[] alp = CountOfCharFormAlp(chArr);
  171.                 int k = 0;
  172.                 for (int i = 0; i < alp.Length; i++)
  173.                 {
  174.                     if (alp[i] == 0)
  175.                         continue;
  176.                     Console.WriteLine($"{(char)(i + 'a')} : {alp[i]} \t");
  177.                     Logger($"{(char)(i + 'a')} : {alp[i]} \t");
  178.                    
  179.                 }
  180.                 Console.WriteLine();
  181.             }
  182.             catch(ArgumentException ex)
  183.             {
  184.                 Console.WriteLine("При подсчете символов из алфавита: "
  185.                     + ex.Message);
  186.                 Logger("При подсчете символов из алфавита: "
  187.                     + ex.Message);
  188.             }
  189.         }
  190.  
  191.         public static void Menu(int N)
  192.         {
  193.             string str = GenerateString(N);
  194.             char[] chArr = str.ToCharArray();
  195.  
  196.             while (true)
  197.             {
  198.                
  199.  
  200.  
  201.                 int menu = ReadInt("Выберите номер пункта:\n\t" +
  202.                     "1. Вывести массив\n\t" +
  203.                     "2. Частый элемент\n\t" +
  204.                     "3. Символы, кратные k\n\t" +
  205.                     "4. Нахождение символов в интервале\n\t" +
  206.                     "5. Подсчет каждого символа\n\t" +
  207.                     "6. Ввести N снова или выйти", 1, 6);
  208.  
  209.                 switch (menu)
  210.                 {
  211.                     case 1:
  212.                         Console.WriteLine(String.Join(" ", chArr));
  213.                         Logger(String.Join(" ", chArr));
  214.                         break;
  215.                     case 2:
  216.                         RunCommon(chArr);
  217.                         break;
  218.                     case 3:
  219.                         RunK(chArr);
  220.                         break;
  221.                     case 4:
  222.                         RunInterval(chArr);
  223.                         break;
  224.                     case 5:
  225.                         RunCounter(chArr);
  226.                         break;
  227.                     case 6:
  228.                         return;
  229.                 }
  230.             }
  231.         }
  232.  
  233.         public static void Main(string[] args)
  234.         {
  235.             do
  236.             {
  237.                 int N = ReadInt("Введите N: ", 1, Int32.MaxValue);
  238.                
  239.                 Menu(N);
  240.  
  241.                 Console.WriteLine("Для продолжения нажмите Enter");
  242.                 Logger("Для продолжения нажмите Enter");
  243.             } while (Console.ReadKey(true).Key == ConsoleKey.Enter);
  244.         }
  245.  
  246.         public static string GenerateString(int N)
  247.         {
  248.             string str = "";
  249.             for (int i = 0; i < N; i++)
  250.             {
  251.                 str += (char)rnd.Next('a', 'z' + 1);
  252.             }
  253.             return str;
  254.         }
  255.  
  256.         public static char[] ConvertStrToChars(string str)
  257.         {
  258.             char[] chArr = new char[str.Length];
  259.  
  260.             for (int i = 0; i < str.Length; i++)
  261.             {
  262.                 chArr[i] = str[i];
  263.             }
  264.  
  265.             return chArr;
  266.         }
  267.  
  268.         public static int[] CountOfCharFormAlp(char[] chArr)
  269.         {
  270.             if (chArr.Length == 0)
  271.                 throw new ArgumentException("Массив нулевой длины");
  272.  
  273.             int[] alp = new int['z' - 'a' + 1];
  274.             for (int i = 0; i < chArr.Length; i++)
  275.             {
  276.                 alp[chArr[i] - 'a']++;
  277.             }
  278.             return alp;
  279.         }
  280.  
  281.         public static char CommonlyOccurringChar(char[] chArr)
  282.         {
  283.             if (chArr.Length == 0)
  284.                 throw new ArgumentException("Массив нулевой длины");
  285.  
  286.             int[] alp = CountOfCharFormAlp(chArr);
  287.             int maxIndex = GetMaxIndex(alp);
  288.             if (maxIndex == -1)
  289.                 throw new ArgumentException("Массив без элементов");
  290.             else
  291.                 return (char)(maxIndex + 'a');
  292.         }
  293.  
  294.         public static int GetMaxIndex(int[] arr)
  295.         {
  296.             int index = -1;
  297.             int max = -1;
  298.             for (int i = 0; i < arr.Length; i++)
  299.             {
  300.                 if(arr[i] > max)
  301.                 {
  302.                     max = arr[i];
  303.                     index = i;
  304.                 }
  305.             }
  306.             return index;
  307.         }
  308.  
  309.         public static char[] kChar(char[] chArr, int k)
  310.         {
  311.             if (chArr.Length == 0)
  312.                 throw new ArgumentException("Массив нулевой длины");
  313.             char[] ans = new char[0];
  314.             for (int i = 0; i < chArr.Length; i++)
  315.             {
  316.                 if((chArr[i] - 'a') % k == 0)
  317.                 {
  318.                     Array.Resize(ref ans, ans.Length + 1);
  319.                     ans[ans.Length - 1] = chArr[i];
  320.                 }
  321.             }
  322.  
  323.             return ans;
  324.         }
  325.         // По условию необходимо лишь посчитать количество, это не так важно.
  326.         public static char[] GetCharsInInterval(char[] chArr, char ch1, char ch2)
  327.         {
  328.             if (chArr.Length == 0)
  329.                 throw new ArgumentException("Массив нулевой длины");
  330.             char[] ans = new char[0];
  331.             for (int i = 0; i < chArr.Length; i++)
  332.             {
  333.                 if (chArr[i] > ch1 && chArr[i] < ch2)
  334.                 {
  335.                     Array.Resize(ref ans, ans.Length + 1);
  336.                     ans[ans.Length - 1] = chArr[i];
  337.                 }
  338.             }
  339.             return ans;
  340.         }
  341.     }
  342. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement