class Program
{
public static double Integral(double x)
{
//Console.WriteLine("X = {0}", x);
return Math.Sin(x) * Math.Cos(Math.Pow(x, 2));
}
public static int n;
public static double h;
public static double Compute(double a, double b)
{
var tasks = new List<Task<double>>();
h = (b - a) / n;
for (var i = a; i < b; i += h)
{
tasks.Add(Task.Factory.StartNew(() => Integral(i)));
}
Task.WhenAll(tasks.ToArray()).Wait();
return tasks.Select(t => t.Result).Sum() * h;
}
static void Main(string[] args)
{
Console.WriteLine("Введите количество интервалов: ");
n = int.Parse(Console.ReadLine());
Console.WriteLine(Compute(0, 5));
Console.ReadKey();
}
}
public static double Compute(double a, double b)
{
// Создаем список задач (Task - работает асинхронно)
var tasks = new List<Task<double>>();
// подсчитываем шаг изменения
h = (b - a) / n;
// тут создаем цикл от а до b с шагом h
for (var i = a; i < b; i += h)
{
// Добавляем в список новую задачу
tasks.Add(
// запускаем новую задачу
Task.Factory.StartNew(
// вычисляем интеграл ассинхроно
() => Integral(i)));
}
// Ожидаем завершения всех задач из списка
// Т.к. процессы асинхронные они могут завершаться в разное время. Не один за другим...
Task.WhenAll(tasks.ToArray()).Wait();
// конечный подсет
// выбирается для каждой задачи результат, затем суммируется и умножается на шаг
return tasks.Select(t => t.Result).Sum() * h;
}
public static double Compute(double a, double b)
{
// Создаем список задач (Task - работает асинхронно)
var tasks = new List<Task<double>>();
// подсчитываем шаг изменения
h = (b - a) / n;
// тут создаем цикл от а до b с шагом h
for (var i = a; i < b; i += h)
{
// Добавляем в список новую задачу
tasks.Add(
// запускаем новую задачу
Task.Factory.StartNew(
// вычисляем интеграл асинхронно
() => Integral(i)));
}
// Ожидаем завершения всех задач из списка
// Т.к. процессы асинхронные они могут завершаться в разное время. Не один за другим...
Task.WhenAll(tasks.ToArray()).Wait();
// конечный подсет
// выбирается для каждой задачи результат, затем суммируется и умножается на шаг
return tasks.Select(t => t.Result).Sum() * h;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.