Многопоточная проверка массивов - C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Понимаю что это личное дело каждого, помогать или нет, тем не менее прошу помощи. Есть задачка для которой нужно самое оптимальное решение, дело в том что я начинающий программист в области С#, так что не ругайте сильно... Написать программу, которая в многопоточном режиме образом обрабатывает массивы х[10], у[15] и z[20]. В главном потоке: 1. Создаются массивы 2. Значения элементов массивов определяются случайным образом. 3. С клавиатуры читаются значения а и b, с и d , p и q с контролем корректности ввода c использованием dll-библиотеки 4. Запускаются потоки 5. Ожидается завершение потоков 6. Выводится на экран: • значение а и b • массив х • кол-во элементов массива х, которые лежат в диапазоне значений a<=x[i]<=b; • значение с и d • массив y • кол-во элементов массива y, которые лежат в диапазоне значений c<=y[i]<=d; • значение p и q • массив z • кол-во элементов массива z, которые лежат в диапазоне значений p<=x[i]<=q;
забыл сказать, dll библиотека уже реализована, называется ConsoleLybrary.dll и создана на базе следующего кода:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleLibrary
  6. {
  7. public class Get
  8. {
  9. static int valueInt32; //поле корректного int
  10. static string buf; //сюда читаем строку ввода
  11. static bool error; //true, если есть ощибка ввода
  12. static float valueFloat; //поле корректного float
  13. static double valueDouble; //поле корректного double
  14. //сообщения
  15. static string msg = "\n Ошибка\n";
  16. static string msgRead = msg + "Нет данного.\n";
  17. static string msgInt32 = msg + "Это не целое int.\n";
  18. static string msgRange = msg + "Значение вне диапазона [{0} - {1}].\n";
  19. static string msgFloat = msg + "Это не вещественное float.\n";
  20. static string msgDouble = msg + "Это не вещественное double.\n";
  21. static string msgLastName1 = msg + "Исправьте первый символ фамилии.\n";
  22. static string msgLastName2 = msg + "Превышено количество символов фамилии[{0}-{1}].\n";
  23. static string msgLastName3 = msg + "";
  24. // методы private обслуживающие внутренние потребности класса
  25. //вызывается при FormatException
  26. static void PutError(string msgError)
  27. {
  28. Console.ForegroundColor = ConsoleColor.Red;
  29. Console.WriteLine(msgError);
  30. Console.ResetColor();
  31. Console.WriteLine("Повторите ввод:");
  32. }
  33. //Вызывается при OverflowException
  34. static void PutError(string msgError, double min, double max)
  35. {
  36. Console.ForegroundColor = ConsoleColor.Red;
  37. if (buf.Length >= 1) Console.WriteLine(msgError, min, max);
  38. Console.ResetColor();
  39. Console.WriteLine("Повторите ввод:");
  40. }
  41. //Вызывается для ввода с клавиатуры
  42. //Формирует Error пустого ввода
  43. static void Read()
  44. {
  45. buf = "";
  46. buf = Console.ReadLine().Trim();
  47. if (buf.Length == 0)
  48. {
  49. error = true;
  50. Console.ForegroundColor = ConsoleColor.Red;
  51. Console.WriteLine(msgRead);
  52. Console.ResetColor();
  53. Console.WriteLine("Повторите ввод:");
  54. }
  55. else
  56. error = false;
  57. }
  58. //Методы пользователя класса.
  59. //Чтение с клавиатуры данного типа int
  60. public static int Int32()
  61. {
  62. do
  63. {
  64. Read();
  65. if (error) continue;
  66. try
  67. {
  68. valueInt32 = Convert.ToInt32(buf);
  69. }
  70. catch (FormatException)
  71. {
  72. error = true;
  73. PutError(msgInt32);
  74. }
  75. catch (OverflowException)
  76. {
  77. error = true;
  78. PutError(msgRange, System.Int32.MinValue, System.Int32.MaxValue);
  79. }
  80. } while (error);
  81. return valueInt32;
  82. }
  83. //чтение с клавиатуры типа int в заданном диапазоне
  84. public static int Int32(int min, int max)
  85. {
  86. int result;
  87. do
  88. {
  89. result = Int32();
  90. if ((result >= min) && (result <= max)) break;
  91. PutError(msgRange, min, max);
  92. } while (true);
  93. return result;
  94. }
  95. //чтение с клавиатуры типа float
  96. public static float Float()
  97. {
  98. do
  99. {
  100. Read();
  101. if (error) continue;
  102. try
  103. {
  104. valueFloat = Convert.ToSingle(buf);
  105. }
  106. catch (FormatException)
  107. {
  108. error = true;
  109. PutError(msgFloat);
  110. }
  111. catch (OverflowException)
  112. {
  113. error = true;
  114. PutError(msgRange, System.Single.MinValue, System.Single.MaxValue);
  115. }
  116. } while (error);
  117. return valueFloat;
  118. }
  119. //чтение с клавиатуры типа float в заданном диапазоне
  120. public static float Float(float min, float max)
  121. {
  122. float result;
  123. do
  124. {
  125. result = Float();
  126. if ((result >= min) && (result <= max)) break;
  127. PutError(msgRange, min, max);
  128. } while (true);
  129. return result;
  130. }
  131. //чтение с клавиатуры типа double
  132. public static double Double()
  133. {
  134. do
  135. {
  136. Read();
  137. if (error) continue;
  138. try
  139. {
  140. valueDouble = Convert.ToDouble(buf);
  141. }
  142. catch (FormatException)
  143. {
  144. error = true;
  145. PutError(msgDouble);
  146. }
  147. catch (OverflowException)
  148. {
  149. error = true;
  150. PutError(msgRange, System.Double.MinValue, System.Double.MaxValue);
  151. }
  152. } while (error);
  153. return valueDouble;
  154. }
  155. //чтение с клавиатуры типа float в заданном диапазоне
  156. public static double Double(double min, double max)
  157. {
  158. double result;
  159. do
  160. {
  161. result = Double();
  162. if ((result >= min) && (result <= max)) break;
  163. PutError(msgRange, min, max);
  164. } while (true);
  165. return result;
  166. }
  167. //чтение с клавиатуры фамилии
  168. //ограничение длины
  169. public static string LastName(int maxSize)
  170. {
  171. string s = "";
  172. char h;
  173. int i;
  174. bool pr;
  175. while (Console.ReadKey().Key != ConsoleKey.N)
  176. {
  177. Console.WriteLine("Введите фамилию >\n");
  178. s = Console.ReadLine();
  179. bool isUpper = char.IsUpper(s[0]);
  180. i = s.Length;
  181. if ((i < 2) || (i > maxSize))
  182. {
  183. Console.WriteLine("Dlina familii doljna biti ot 2 do " + maxSize + " simvolov");
  184. Console.WriteLine("Press any key for continue or n for exit...");
  185. continue;
  186. }
  187.  
  188. if (!isUpper)
  189. {
  190. Console.WriteLine("Familia doljna nacinatsia s zaglavnoi bucvi");
  191. Console.WriteLine("Press any key for continue or n for exit...");
  192. continue;
  193. }
  194. h = s[0];
  195. if (h == 'Ъ' || h == 'Ь')
  196. {
  197. Console.WriteLine("Familia ne mojet nacinatsia s bucvi " + h);
  198. Console.WriteLine("Press any key for continue or n for exit...");
  199. continue;
  200. }
  201. for (i = 0; i <= s.Length - 1; i++)
  202. {
  203. pr = Char.IsLetter(s[i]);
  204. if (!pr)
  205. {
  206. Console.WriteLine("V familii ne mojet biti cifr. Proverite " + i + " simvol");
  207. Console.WriteLine("Press any key for continue or n for exit...");
  208. continue;
  209. }
  210. }
  211. }
  212.  
  213. return s;
  214. }
  215. }
  216. }

Решение задачи: «Многопоточная проверка массивов»

textual
Листинг программы
  1.         static void Main(string[] args)
  2.         {
  3.  
  4.             var _a = 1;
  5.             var _b = 5;
  6.             var _c = 2;
  7.             var _d = 18;
  8.             var _p = 7;
  9.             var _q = 10;
  10.  
  11.             Random _rand = new Random();
  12.             var x = Enumerable.Range(0, 10)
  13.                                     .Select(r => Convert.ToInt32(_rand.Next(10)))
  14.                                     .ToArray();
  15.             var y = Enumerable.Range(0, 15)
  16.                                     .Select(r => Convert.ToInt32(_rand.Next(15)))
  17.                                     .ToArray();
  18.  
  19.             var z = Enumerable.Range(0, 20)
  20.                                     .Select(r => Convert.ToInt32(_rand.Next(20)))
  21.                                     .ToArray();
  22.  
  23.  
  24.             var tasks = new Task<int>[3];
  25.  
  26.             tasks[0] = Task<int>.Run(() => { return x.Count(input => input >= _a && input <= _b); });
  27.             tasks[1] = Task<int>.Run(() => { return y.Count(input => input >= _c && input <= _d); });
  28.             tasks[2] = Task<int>.Run(() => { return z.Count(input => input >= _p && input <= _q); });
  29.  
  30.  
  31.             Task.WaitAll(tasks);
  32.  
  33.  
  34.             Console.WriteLine(_a+" "+_b);
  35.             Console.WriteLine(String.Join(" ", x ));
  36.             Console.WriteLine(tasks[0].Result);
  37.             Console.WriteLine();
  38.  
  39.             Console.WriteLine(_c + " " + _d);
  40.             Console.WriteLine(String.Join(" ", y));
  41.             Console.WriteLine(tasks[1].Result);
  42.             Console.WriteLine();
  43.  
  44.             Console.WriteLine(_p + " " + _q);
  45.             Console.WriteLine(String.Join(" ", z));
  46.             Console.WriteLine(tasks[2].Result);
  47.             Console.WriteLine();
  48.    
  49.             Console.ReadKey();
  50.  
  51.  
  52. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы