Сформировать как минимум три потока, которые будут вычислять значение бесконечной суммы с заданной точностью - 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();
}
}
}