Создать многопоточное приложение для определения количество вхождений числа b в массив C - C#
Формулировка задачи:
Задание написать программу
Дана последовательность чисел С = {с0…сn–1} и число b. Создать многопоточное приложение для определения количество вхождений числа b в массив C.
Как я понял в массиве у нас будут хранится номер элементов. Основной поток создает нужное число потоков, число которых задается параметром, каждому из которых передается параметр – номер процесса (или номер части массива, обрабатываемой потоком). Функция потока считает количество вхождений числа b в массив C, а основной поток ждет завершения всех потоков Заранее, большое спасибо! Вот есть похожая задачка для примера, но я все равно не понимаю Дана последовательность натуральных чисел a0, …, a99. Создать поточное приложение для поиска суммы квадратов ∑ai2using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Diagnostics; namespace MultiThread { class Program {static int []a=new int [1000]; static int n; static void ThreadFunc(int param, out int sum) //Функция потока { int i,nt,beg,h,end; sum=0; nt=param; h=1000/n; beg = h*nt;end=beg+h; if (nt==n-1) end=1000; Console.WriteLine("Поток {0} начало {1} конец {2}",nt,beg,end); for(i=beg;i<end;i++) sum += a[i]*a[i]; } static void Main(string[] args) {n=Convert.ToInt32(args[0]); Stopwatch sWatch = new Stopwatch(); short start1, finish1,start2,finish2; int i; Thread [] thread =new Thread[n]; int [] s1=new int[n]; int rez=0,s = 0; int[] x = new int[n]; for (i=0;i<100;i++) a[i] = i; sWatch.Start(); //создание n дочерних потоков for (i=0;i<n;i++) {x[i]= i;thread[i] = new Thread(()=>ThreadFunc(x[i],out s1[i])); thread[i].Start(); thread[i].Join(); } for(i=0;i<n;i++) rez+=s1[i]; sWatch.Stop(); Console.WriteLine (sWatch.ElapsedMilliseconds.ToString()); Console.WriteLine("Сумма квадратов с {0} потоками = {1}",n,rez); sWatch.Start(); for (i = 0; i < 1000; i++) s += a[i]*a[i]; sWatch.Stop(); Console.WriteLine(sWatch.ElapsedMilliseconds.ToString()); Console.WriteLine("Сумма квадратов без потоков = {0}", s); Console.ReadLine(); } } }
Решение задачи: «Создать многопоточное приложение для определения количество вхождений числа b в массив C»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading; namespace ConsoleApplication173 { class Program { static int[] C = new int[1000]; static int n; static int b;//наше число static int[] sl; static void ThreadFunc(int param)//функия потока { int i, nt, beg, h, end; nt = param; var res = 0; h = 1000 / n; beg = h * nt; end = beg + h; if (nt == n - 1) end = 1000; Console.WriteLine("Поток {0} начало {1} конец {2}", nt, beg, end); for (i = beg; i < end; i++) { if (C[i] == b) res++; } Console.WriteLine("Поток {0} стоп", nt); sl[param] = res; } static void Main(string[] args) { Console.WriteLine("Введите число"); b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введите количество потоков"); n = Convert.ToInt32(Console.ReadLine()); Stopwatch sWatch = new Stopwatch(); //short start1, finish1, start2, finish2; int i; Thread[] thead = new Thread[n]; sl = new int[n]; int rez = 0; for (i = 0; i < 1000; i++) C[i] = i; sWatch.Start(); //Cоздание дочерних потоков for (i = 0; i < n; i++) { var temp = i; thead[i] = new Thread(() => ThreadFunc(temp)); thead[i].Start(); } for (i = 0; i < n; i++) { thead[i].Join(); rez += sl[i]; } sWatch.Stop(); Console.WriteLine("Число вхождений в массив {0} потоками ={1}", n, rez); Console.WriteLine("Время:{0}", sWatch.ElapsedMilliseconds.ToString()); sWatch.Start(); int res = 0; for (i = 0; i < 1000; i++) if (C[i] == b) res++; sWatch.Stop(); Console.WriteLine("Число вхождений в массив без потоков ={0}", res); Console.WriteLine("Время:{0}", sWatch.ElapsedMilliseconds.ToString()); Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д