Создать многопоточное приложение для определения количество вхождений числа b в массив C - C#

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

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

Задание написать программу

Дана последовательность чисел С = {с0…сn–1} и число b. Создать многопоточное приложение для определения количество вхождений числа b в массив C.

Как я понял в массиве у нас будут хранится номер элементов. Основной поток создает нужное число потоков, число которых задается параметром, каждому из которых передается параметр – номер процесса (или номер части массива, обрабатываемой потоком). Функция потока считает количество вхождений числа b в массив C, а основной поток ждет завершения всех потоков Заранее, большое спасибо! Вот есть похожая задачка для примера, но я все равно не понимаю Дана последовательность натуральных чисел a0, …, a99. Создать поточное приложение для поиска суммы квадратов ∑ai2
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Diagnostics;
  7. namespace MultiThread
  8. {
  9. class Program
  10. {static int []a=new int [1000];
  11. static int n;
  12. static void ThreadFunc(int param, out int sum) //Функция потока
  13. {
  14. int i,nt,beg,h,end;
  15. sum=0;
  16. nt=param;
  17. h=1000/n;
  18. beg = h*nt;end=beg+h;
  19. if (nt==n-1)
  20. end=1000;
  21. Console.WriteLine("Поток {0} начало {1} конец {2}",nt,beg,end);
  22. for(i=beg;i<end;i++) sum += a[i]*a[i];
  23. }
  24.  
  25. static void Main(string[] args)
  26. {n=Convert.ToInt32(args[0]);
  27. Stopwatch sWatch = new Stopwatch();
  28. short start1, finish1,start2,finish2;
  29. int i;
  30. Thread [] thread =new Thread[n];
  31. int [] s1=new int[n];
  32. int rez=0,s = 0;
  33. int[] x = new int[n];
  34. for (i=0;i<100;i++)
  35. a[i] = i;
  36. sWatch.Start();
  37. //создание n дочерних потоков
  38. for (i=0;i<n;i++)
  39. {x[i]= i;thread[i] = new Thread(()=>ThreadFunc(x[i],out s1[i]));
  40. thread[i].Start(); thread[i].Join();
  41. }
  42. for(i=0;i<n;i++) rez+=s1[i];
  43. sWatch.Stop();
  44. Console.WriteLine (sWatch.ElapsedMilliseconds.ToString());
  45. Console.WriteLine("Сумма квадратов с {0} потоками = {1}",n,rez);
  46. sWatch.Start();
  47. for (i = 0; i < 1000; i++) s += a[i]*a[i];
  48. sWatch.Stop();
  49. Console.WriteLine(sWatch.ElapsedMilliseconds.ToString());
  50. Console.WriteLine("Сумма квадратов без потоков = {0}", s);
  51. Console.ReadLine();
  52. }
  53. }
  54. }

Решение задачи: «Создать многопоточное приложение для определения количество вхождений числа b в массив C»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Threading;
  6.  
  7. namespace ConsoleApplication173
  8. {
  9.     class Program
  10.     {
  11.         static int[] C = new int[1000];
  12.         static int n;
  13.         static int b;//наше число
  14.  
  15.         static int[] sl;
  16.  
  17.         static void ThreadFunc(int param)//функия потока
  18.         {
  19.             int i, nt, beg, h, end;
  20.             nt = param;
  21.             var res = 0;
  22.             h = 1000 / n;
  23.             beg = h * nt;
  24.             end = beg + h;
  25.             if (nt == n - 1)
  26.                 end = 1000;
  27.  
  28.             Console.WriteLine("Поток {0} начало {1} конец {2}", nt, beg, end);
  29.  
  30.             for (i = beg; i < end; i++)
  31.             {
  32.                 if (C[i] == b)
  33.                     res++;
  34.             }
  35.  
  36.             Console.WriteLine("Поток {0} стоп", nt);
  37.  
  38.             sl[param] = res;
  39.  
  40.         }
  41.  
  42.         static void Main(string[] args)
  43.         {
  44.             Console.WriteLine("Введите число");
  45.  
  46.             b = Convert.ToInt32(Console.ReadLine());
  47.             Console.WriteLine("Введите количество потоков");
  48.  
  49.             n = Convert.ToInt32(Console.ReadLine());
  50.             Stopwatch sWatch = new Stopwatch();
  51.             //short start1, finish1, start2, finish2;
  52.             int i;
  53.             Thread[] thead = new Thread[n];
  54.             sl = new int[n];
  55.             int rez = 0;
  56.  
  57.             for (i = 0; i < 1000; i++)
  58.                 C[i] = i;
  59.             sWatch.Start();
  60.             //Cоздание дочерних потоков
  61.             for (i = 0; i < n; i++)
  62.             {
  63.                 var temp = i;
  64.                 thead[i] = new Thread(() => ThreadFunc(temp));
  65.                 thead[i].Start();
  66.             }
  67.  
  68.             for (i = 0; i < n; i++)
  69.             {
  70.                 thead[i].Join();
  71.                 rez += sl[i];
  72.             }
  73.  
  74.             sWatch.Stop();
  75.  
  76.             Console.WriteLine("Число вхождений в массив {0} потоками ={1}", n, rez);
  77.             Console.WriteLine("Время:{0}", sWatch.ElapsedMilliseconds.ToString());
  78.             sWatch.Start();
  79.  
  80.             int res = 0;
  81.             for (i = 0; i < 1000; i++)
  82.                 if (C[i] == b)
  83.                     res++;
  84.             sWatch.Stop();
  85.  
  86.             Console.WriteLine("Число вхождений в массив без потоков ={0}", res);
  87.             Console.WriteLine("Время:{0}", sWatch.ElapsedMilliseconds.ToString());
  88.             Console.ReadLine();
  89.         }
  90.     }
  91.  
  92. }

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


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

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

14   голосов , оценка 4.071 из 5

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

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

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