Пул потоками вывести номер столбца массива, в котором есть минимальный элемент текущей строки - C#

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

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

Мне нужно пул потоками вивести номер столпца массива в котором есть минимальный елемент текущей строки. Програма сделана по шаблону даному учителем. (Извените зо ошибки)
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. namespace lab_2
  7. {
  8. class Program
  9. {
  10. static int numOfCol = 0;
  11. static int j, i = 0;
  12. static int min = 0;
  13. static int number = 10;
  14. static int[,] mas = new int[number, number];
  15. static Random rnd = new Random();
  16. public class EntryPoint
  17. {
  18. public static void TimerProc(object state)
  19. { }
  20. }
  21. public static void Main()
  22. {
  23. int workerThreads;
  24. int portThreads;
  25. for (i = 0; i < number; i++)
  26. {
  27. for (j = 0; j < number; j++)
  28. {
  29. mas[i, j] = rnd.Next(1, 100);
  30. }
  31. }
  32. Console.WriteLine("processor=" + Environment.ProcessorCount);
  33. ThreadPool.GetMaxThreads(out workerThreads, out portThreads);
  34. Console.WriteLine("\nMaximum worker threads: \t{0}" + "\nMaximum completion port threads: {1}", workerThreads, portThreads);
  35. //Определить нужное максимальное количество потоков
  36. //Пусть будет по 4 на каждий процесор
  37. //
  38. int MaxtTreadsCount = Environment.ProcessorCount * 4;
  39. int MaxThreadsCount = 20;
  40. //Установим мвксимальное количество робочих потоков
  41. ThreadPool.SetMaxThreads(MaxThreadsCount, MaxThreadsCount);
  42. // Устаовим минимальное количество робочих потоков
  43. ThreadPool.SetMinThreads(2, 2);
  44. for (i = 0; i < number; i++)
  45. {
  46. for (j = 0; j < number; j++)
  47. {
  48. Console.WriteLine("i=" + i + " j=" + j + " mas=" + mas[i, j]);
  49. }
  50. }
  51. Console.WriteLine("start time=" + DateTime.Now.Millisecond);
  52. for (i = 0; i < number; i++)
  53. {
  54. min = mas[i, 0];
  55. for (j = 0; j < number; j++)
  56. {
  57. ThreadPool.QueueUserWorkItem(Function, mas[i, j]);
  58. //if (j == (number - 1)) { Console.WriteLine("Row" + i + "Min is in: " + numOfCol); }
  59. }
  60. Console.WriteLine("Row-" + i + "Min is in: " + numOfCol);
  61. numOfCol = 0;
  62. }
  63. ThreadPool.GetMaxThreads(out workerThreads, out portThreads);
  64. Console.WriteLine("\nmaximum worker threads: /t{0}" + "\nmaximum completion port threads: {1}", workerThreads, portThreads);
  65. Console.WriteLine("end time=" + DateTime.Now.Millisecond);
  66. Console.ReadLine();
  67. }
  68. public static void Function(object instance)
  69. {
  70. Console.WriteLine(DateTime.Now.Millisecond + " Hello of thread {0}! ", Thread.CurrentThread.GetHashCode());
  71. int z = (int)instance;
  72. if (z < min)
  73. {
  74. min = z;
  75. numOfCol = j;
  76. }
  77. Thread.Sleep(1000);
  78. }
  79. }
  80. }

Решение задачи: «Пул потоками вывести номер столбца массива, в котором есть минимальный элемент текущей строки»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Threading;
  6.  
  7. namespace ConsoleApplication1
  8. {
  9.     class Programm
  10.     {
  11.         public static int N = 10;
  12.         public static int LimitNumberRandom=100;
  13.  
  14.         public static void Main()
  15.         {
  16.             var indexRow = 0;
  17.             var rnd = new Random();
  18.             var elements = new List<int>(new int[N]);
  19.             var massiv = new List<DataElement>();
  20.             elements.ForEach(elementList =>
  21.                 {
  22.                     var dataElement = new DataElement(++indexRow);
  23.                     elements.ForEach(element => dataElement.Elements.Add(rnd.Next(LimitNumberRandom)-rnd.Next(LimitNumberRandom)));
  24.                     massiv.Add(dataElement);
  25.                 });
  26.             Console.WriteLine("Massive");
  27.             massiv.ForEach(listElement =>
  28.                 {
  29.                     listElement.Elements.ForEach(element => Console.Write("{0,4} ", element));
  30.                     Console.WriteLine();
  31.                 });
  32.             Console.WriteLine();
  33.             massiv.AsParallel().ForAll(listElement =>
  34.             {
  35.                 var watch = new Stopwatch();
  36.                 watch.Start();
  37.                 var elementIndex = 1;
  38.                 var minIndex = elementIndex;
  39.                 var min = listElement.Elements[0];
  40.                 listElement.Elements.ForEach(element =>
  41.                 {
  42.                     if (min > element)
  43.                     {
  44.                         min = element;
  45.                         minIndex = elementIndex;
  46.                     }
  47.                     elementIndex++;
  48.                 });
  49.                 watch.Stop();
  50.                 Console.WriteLine("{0} ticks: Hello of thread {1}! Min[{2},{3}] = {4}",  watch.ElapsedTicks, Thread.CurrentThread.ManagedThreadId, listElement.IndexRow, minIndex, min);
  51.             });
  52.             Console.ReadLine();
  53.         }
  54.  
  55.         private class DataElement
  56.         {
  57.             public DataElement(int indexRow)
  58.             {
  59.                 IndexRow = indexRow;
  60.                 Elements = new List<int>();
  61.             }
  62.  
  63.             public int IndexRow { get; set; }
  64.             public List<int> Elements { get; set; }
  65.         }
  66.     }
  67. }

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


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

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

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

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

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

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