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

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

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

Немного изменить программу под пой вариант. Разработайте многопоточное приложение, которое будет формировать как минимум три потока, которые будут вычислять значение бесконечной суммы с точностью Эпсилон=10-6 При этом потоки должны работать последовательно друг за другом. И включаться пользователем Выражение: 1+(1/1!)+(1/2!)+(1/3!)+...+(1/n!)+... Такая же программа для другого выражения: Выражение: 1+(1/2^4)+(1/3^4)+...+(1/n^4)+...
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading;
 
namespace ConsoleApplication1
{
class Program
    {
static double n = 1;
static object locker = new object();
static double eps = 0.000001, sum = 0, prev=0;
static void Function_of_thread()
        {
lock (locker)
            {
prev = sum;
sum+=1/(Math.Pow(n,4));
                ++n;
Console.WriteLine("Япоток №" + n + " SUM=" + sum);
            }
        }
 
static void Main(string[] args)
        {
              for (int i = 0; i < 10; i++)
            {
                Thread thr = new Thread(Function_of_thread);
                thr.Start();
            }
            Console.Read();
 
     }
    }
}

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
 
namespace ConsoleApplication1
{
    class Program
    {
        static int n = 1;
        static double sum = 1, prev = 0;
        static void Function_of_thread()
        {
            do
            {
                prev = sum;
                var x = fact(n);
                if (x == 0)
                    return;
                sum += 1.0 / x;
                ++n;
                Console.WriteLine("Я поток № " + Thread.CurrentThread.ManagedThreadId + " SUM=" + sum);
                
            } while (true);
        }
 
        static long fact(int n)
        {
            if (n < 0)
                return 0;
            int res = 1;
            for (int i = 1; i < n; i++)
                res *= i;
            return res;
        }
 
        static void Main(string[] args)
        {
            Thread[] thr = new Thread[3];
            for (int i = 0; i < 3; i++)
            {
                thr[i] = new Thread(Function_of_thread);
                thr[i].Start();
            }
            Console.Read();
            for (int i = 0; i < 3; i++)
                thr[i].Abort();
        }
    }
}

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


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

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

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