Anonim_999

Kir2

Nov 22nd, 2022 (edited)
880
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.42 KB | None | 0 0
  1. using System;
  2. using System.Threading;
  3.  
  4. namespace ConsoleApp19
  5. {
  6.     class Program
  7.     {
  8.         public static int[] A;
  9.         public static int ArrayLen;
  10.         public static int ThreadCount;
  11.         public static object Locker = new object();
  12.         public static int SubArrayLen;
  13.         public static int Result = 0;
  14.  
  15.         static void Main(string[] args)
  16.         {
  17.             string inputData;
  18.             Console.Write("Длина массива: ");
  19.             inputData = Console.ReadLine();
  20.  
  21.             if (int.TryParse(inputData, out ArrayLen) == false || ArrayLen < 1)
  22.             {
  23.                 ArrayLen = 10;
  24.                 Console.WriteLine($"Сброс до стандартных значений: {ArrayLen}");
  25.             }
  26.             A = new int[ArrayLen];
  27.             Console.WriteLine("Заполнение массива:");
  28.             UserInputArray(ref A);
  29.             Console.WriteLine("Элементы массива: ");
  30.             foreach (int item in A)
  31.                 Console.Write($"{item} ");
  32.             Console.Write("\nКоличество потоков: ");
  33.             inputData = Console.ReadLine();
  34.  
  35.             if (int.TryParse(inputData, out ThreadCount) == false || ThreadCount < 1)
  36.             {
  37.                 ThreadCount = 1;
  38.                 Console.WriteLine($"Сброс до стандартных значений: {ThreadCount}");
  39.             }
  40.  
  41.             if (ThreadCount > ArrayLen)
  42.                 ThreadCount = ArrayLen;
  43.             SubArrayLen = ArrayLen / ThreadCount + 1;
  44.             Thread[] threads = new Thread[ThreadCount];
  45.  
  46.             for (int i = 0; i < ThreadCount; i++)
  47.             {
  48.                 PartArray partArray = new PartArray
  49.                 {
  50.                     StartIndex = i * SubArrayLen,
  51.                     EndIndex = (i + 1) * SubArrayLen
  52.                 };
  53.  
  54.                 if (partArray.EndIndex > ArrayLen)
  55.                     partArray.EndIndex = ArrayLen;
  56.                 threads[i] = new Thread(() => SumWith3(partArray));
  57.                 threads[i].Name = $"Поток№{i + 1}";
  58.                 threads[i].Start();
  59.             }
  60.  
  61.             foreach (Thread item in threads)
  62.             {
  63.                 Console.WriteLine($"{item.Name} - запустился");
  64.                 item.Join();
  65.                 Console.WriteLine($"{item.Name} - закончил");
  66.             }
  67.             Console.WriteLine($"Результат: {Result}");
  68.             Console.ReadLine();
  69.         }
  70.  
  71.         private static void UserInputArray(ref int[] array)
  72.         {
  73.             for (int i = 0; i < array.Length; i++)
  74.             {
  75.                 Console.Write($"{i + 1}:");
  76.  
  77.                 if (int.TryParse(Console.ReadLine(), out array[i]) == false || array[i] < 1)
  78.                 {
  79.                     Console.WriteLine("Неправильный ввод");
  80.                     i--;
  81.                 }
  82.             }
  83.         }
  84.  
  85.         private static void SumWith3(PartArray partArray)
  86.         {
  87.             int start = partArray.StartIndex;
  88.             int end = partArray.EndIndex;
  89.  
  90.             for (int i = start; i < end; i++)
  91.             {
  92.                 if (A[i].ToString().EndsWith('3'))
  93.                     lock (Locker)
  94.                         Result += A[i];
  95.             }
  96.         }
  97.     }
  98.  
  99.     class PartArray
  100.     {
  101.         public int StartIndex;
  102.         public int EndIndex;
  103.     }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment