Создать многопоточное приложение для определения количество вхождений числа b в массив C - C#
Формулировка задачи:
Задание написать программу
Дана последовательность чисел С = {с0…сn–1} и число b. Создать многопоточное приложение для определения количество вхождений числа b в массив C.
Как я понял в массиве у нас будут хранится номер элементов. Основной поток создает нужное число потоков, число которых задается параметром, каждому из которых передается параметр – номер процесса (или номер части массива, обрабатываемой потоком). Функция потока считает количество вхождений числа b в массив C, а основной поток ждет завершения всех потоков Заранее, большое спасибо! Вот есть похожая задачка для примера, но я все равно не понимаю Дана последовательность натуральных чисел a0, …, a99. Создать поточное приложение для поиска суммы квадратов ∑ai2
Листинг программы
- using 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д