Многопоточная проверка массивов - C#

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

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

Всем доброго времени суток! Понимаю что это личное дело каждого, помогать или нет, тем не менее прошу помощи. Есть задачка для которой нужно самое оптимальное решение, дело в том что я начинающий программист в области С#, так что не ругайте сильно... Написать программу, которая в многопоточном режиме образом обрабатывает массивы х[10], у[15] и z[20]. В главном потоке: 1. Создаются массивы 2. Значения элементов массивов определяются случайным образом. 3. С клавиатуры читаются значения а и b, с и d , p и q с контролем корректности ввода c использованием dll-библиотеки 4. Запускаются потоки 5. Ожидается завершение потоков 6. Выводится на экран: • значение а и b • массив х • кол-во элементов массива х, которые лежат в диапазоне значений a<=x[i]<=b; • значение с и d • массив y • кол-во элементов массива y, которые лежат в диапазоне значений c<=y[i]<=d; • значение p и q • массив z • кол-во элементов массива z, которые лежат в диапазоне значений p<=x[i]<=q;
забыл сказать, dll библиотека уже реализована, называется ConsoleLybrary.dll и создана на базе следующего кода:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleLibrary
{
   public class Get
    {
        static int valueInt32;               //поле корректного int
        static string buf;                  //сюда читаем строку ввода
        static bool error;                  //true, если есть ощибка ввода
        static float valueFloat;            //поле корректного float
        static double valueDouble;            //поле корректного double
        //сообщения
        static string msg = "\n Ошибка\n";
        static string msgRead = msg + "Нет данного.\n";
        static string msgInt32 = msg + "Это не целое int.\n";
        static string msgRange = msg + "Значение вне диапазона [{0} - {1}].\n";
        static string msgFloat = msg + "Это не вещественное float.\n";
        static string msgDouble = msg + "Это не вещественное double.\n";
        static string msgLastName1 = msg + "Исправьте первый символ фамилии.\n";
        static string msgLastName2 = msg + "Превышено количество символов фамилии[{0}-{1}].\n";
        static string msgLastName3 = msg + "";
        // методы private обслуживающие внутренние потребности класса
 
        //вызывается при FormatException
        static void PutError(string msgError)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(msgError);
            Console.ResetColor();
            Console.WriteLine("Повторите ввод:");
        }
        //Вызывается при OverflowException
        static void PutError(string msgError, double min, double max)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            if (buf.Length >= 1) Console.WriteLine(msgError, min, max);
            Console.ResetColor();
            Console.WriteLine("Повторите ввод:");
        }
        //Вызывается для ввода с клавиатуры
        //Формирует Error пустого ввода
        static void Read()
        {
            buf = "";
            buf = Console.ReadLine().Trim();
            if (buf.Length == 0)
            {
                error = true;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(msgRead);
                Console.ResetColor();
                Console.WriteLine("Повторите ввод:");
            }
            else
                error = false;
        }
        //Методы пользователя класса.
        //Чтение с клавиатуры данного типа int
        public static int Int32()
        {
            do
            {
                Read();
                if (error) continue;
                try
                {
                    valueInt32 = Convert.ToInt32(buf);
                }
                catch (FormatException)
                {
                    error = true;
                    PutError(msgInt32);
                }
                catch (OverflowException)
                {
                    error = true;
                    PutError(msgRange, System.Int32.MinValue, System.Int32.MaxValue);
                }
            } while (error);
            return valueInt32;
        }
        //чтение с клавиатуры типа int в заданном диапазоне
        public static int Int32(int min, int max)
        {
            int result;
            do
            {
                result = Int32();
                if ((result >= min) && (result <= max)) break;
                PutError(msgRange, min, max);
            } while (true);
            return result;
        }
        //чтение с клавиатуры  типа float
        public static float Float()
        {
            do
            {
                Read();
                if (error) continue;
                try
                {
                    valueFloat = Convert.ToSingle(buf);
                }
                catch (FormatException)
                {
                    error = true;
                    PutError(msgFloat);
                }
                catch (OverflowException)
                {
                    error = true;
                    PutError(msgRange, System.Single.MinValue, System.Single.MaxValue);
                }
            } while (error);
            return valueFloat;
        }
        //чтение с клавиатуры типа float в заданном диапазоне
        public static float Float(float min, float max)
        {
            float result;
            do
            {
                result = Float();
                if ((result >= min) && (result <= max)) break;
                PutError(msgRange, min, max);
            } while (true);
            return result;
        }
        //чтение с клавиатуры  типа double
        public static double Double()
        {
            do
            {
                Read();
                if (error) continue;
                try
                {
                    valueDouble = Convert.ToDouble(buf);
                }
                catch (FormatException)
                {
                    error = true;
                    PutError(msgDouble);
                }
                catch (OverflowException)
                {
                    error = true;
                    PutError(msgRange, System.Double.MinValue, System.Double.MaxValue);
                }
            } while (error);
            return valueDouble;
        }
        //чтение с клавиатуры типа float в заданном диапазоне
        public static double Double(double min, double max)
        {
            double result;
            do
            {
                result = Double();
                if ((result >= min) && (result <= max)) break;
                PutError(msgRange, min, max);
            } while (true);
            return result;
        }
        //чтение с клавиатуры фамилии
        //ограничение длины
        public static string LastName(int maxSize)
        {
            string s = "";
            char h;
            int i;
            bool pr;
 
            while (Console.ReadKey().Key != ConsoleKey.N)
            {
                Console.WriteLine("Введите фамилию >\n");
                s = Console.ReadLine();
                bool isUpper = char.IsUpper(s[0]);
                i = s.Length;
                if ((i < 2) || (i > maxSize))
                {
                    Console.WriteLine("Dlina familii doljna biti ot 2 do " + maxSize + " simvolov");
                    Console.WriteLine("Press any key for continue or n for exit...");
                    continue;
 
                }

                if (!isUpper)
                {
                    Console.WriteLine("Familia doljna nacinatsia s zaglavnoi bucvi");
                    Console.WriteLine("Press any key for continue or n for exit...");
                    continue;
                }
 
                h = s[0];
 
                if (h == 'Ъ' || h == 'Ь')
                {
                    Console.WriteLine("Familia ne mojet nacinatsia s bucvi " + h);
                    Console.WriteLine("Press any key for continue or n for exit...");
                    continue;
                }
 
                for (i = 0; i <= s.Length - 1; i++)
                {
 
                    pr = Char.IsLetter(s[i]);
                    if (!pr)
                    {
                        Console.WriteLine("V familii ne mojet biti  cifr. Proverite " + i + " simvol");
                        Console.WriteLine("Press any key for continue or n for exit...");
                        continue;
                    }
 
                }
 
            }

            return s;
        }
    }
}

Решение задачи: «Многопоточная проверка массивов»

textual
Листинг программы
        static void Main(string[] args)
        {
 
            var _a = 1;
            var _b = 5;
            var _c = 2;
            var _d = 18;
            var _p = 7;
            var _q = 10;
 
            Random _rand = new Random();
            var x = Enumerable.Range(0, 10)
                                    .Select(r => Convert.ToInt32(_rand.Next(10)))
                                    .ToArray();
            var y = Enumerable.Range(0, 15)
                                    .Select(r => Convert.ToInt32(_rand.Next(15)))
                                    .ToArray();
 
            var z = Enumerable.Range(0, 20)
                                    .Select(r => Convert.ToInt32(_rand.Next(20)))
                                    .ToArray();
 
 
            var tasks = new Task<int>[3];
 
            tasks[0] = Task<int>.Run(() => { return x.Count(input => input >= _a && input <= _b); });
            tasks[1] = Task<int>.Run(() => { return y.Count(input => input >= _c && input <= _d); });
            tasks[2] = Task<int>.Run(() => { return z.Count(input => input >= _p && input <= _q); });
 
 
            Task.WaitAll(tasks);
 
 
            Console.WriteLine(_a+" "+_b);
            Console.WriteLine(String.Join(" ", x ));
            Console.WriteLine(tasks[0].Result);
            Console.WriteLine();
 
            Console.WriteLine(_c + " " + _d);
            Console.WriteLine(String.Join(" ", y));
            Console.WriteLine(tasks[1].Result);
            Console.WriteLine();
 
            Console.WriteLine(_p + " " + _q);
            Console.WriteLine(String.Join(" ", z));
            Console.WriteLine(tasks[2].Result);
            Console.WriteLine();
    
            Console.ReadKey();
 
 
}

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


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

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

13   голосов , оценка 3.692 из 5
Похожие ответы