Сформировать как минимум три потока, которые будут вычислять значение бесконечной суммы с заданной точностью - C#

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

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

Немного изменить программу под пой вариант. Разработайте многопоточное приложение, которое будет формировать как минимум три потока, которые будут вычислять значение бесконечной суммы с точностью Эпсилон=10-6 При этом потоки должны работать последовательно друг за другом. И включаться пользователем Выражение: 1+(1/1!)+(1/2!)+(1/3!)+...+(1/n!)+... Такая же программа для другого выражения: Выражение: 1+(1/2^4)+(1/3^4)+...+(1/n^4)+...
Листинг программы
  1. using System;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Linq;
  4. usingSystem.Text;
  5. usingSystem.Threading;
  6. namespace ConsoleApplication1
  7. {
  8. class Program
  9. {
  10. static double n = 1;
  11. static object locker = new object();
  12. static double eps = 0.000001, sum = 0, prev=0;
  13. static void Function_of_thread()
  14. {
  15. lock (locker)
  16. {
  17. prev = sum;
  18. sum+=1/(Math.Pow(n,4));
  19. ++n;
  20. Console.WriteLine("Япоток №" + n + " SUM=" + sum);
  21. }
  22. }
  23. static void Main(string[] args)
  24. {
  25. for (int i = 0; i < 10; i++)
  26. {
  27. Thread thr = new Thread(Function_of_thread);
  28. thr.Start();
  29. }
  30. Console.Read();
  31. }
  32. }
  33. }

Решение задачи: «Сформировать как минимум три потока, которые будут вычислять значение бесконечной суммы с заданной точностью»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8.     class Program
  9.     {
  10.         static int n = 1;
  11.         static double sum = 1, prev = 0;
  12.         static void Function_of_thread()
  13.         {
  14.             do
  15.             {
  16.                 prev = sum;
  17.                 var x = fact(n);
  18.                 if (x == 0)
  19.                     return;
  20.                 sum += 1.0 / x;
  21.                 ++n;
  22.                 Console.WriteLine("Я поток № " + Thread.CurrentThread.ManagedThreadId + " SUM=" + sum);
  23.                
  24.             } while (true);
  25.         }
  26.  
  27.         static long fact(int n)
  28.         {
  29.             if (n < 0)
  30.                 return 0;
  31.             int res = 1;
  32.             for (int i = 1; i < n; i++)
  33.                 res *= i;
  34.             return res;
  35.         }
  36.  
  37.         static void Main(string[] args)
  38.         {
  39.             Thread[] thr = new Thread[3];
  40.             for (int i = 0; i < 3; i++)
  41.             {
  42.                 thr[i] = new Thread(Function_of_thread);
  43.                 thr[i].Start();
  44.             }
  45.             Console.Read();
  46.             for (int i = 0; i < 3; i++)
  47.                 thr[i].Abort();
  48.         }
  49.     }
  50. }

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


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

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

11   голосов , оценка 4 из 5

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

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

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