class Program
{
static double getDouble(Random rand)
{
return rand.NextDouble();
}
static double GetPiVAlue(int radius, double dots_count)
{
double dotsInCircleCount = 0;
int radius2 = radius * radius;
Random rand = new Random();
for (int i = 0; i < dots_count; i++)
{
double x = getDouble(rand) * radius;
double y = getDouble(rand) * radius;
if ((y * y) + (x * x) <= radius2)
dotsInCircleCount++;
}
return 4.0 * dotsInCircleCount / dots_count;
}
static void Main(string[] args)
{
double pi = 0;
DateTime begin = DateTime.Now;
for (int i = 0; i < 10; i++)
{
pi += GetPiVAlue(1, 70000000);
}
pi /= 10;
DateTime end = DateTime.Now;
Console.WriteLine(end.Subtract(begin));
begin = DateTime.Now;
List<Task<double>> pi_tasks = new List<Task<double>>();
for (int i = 0; i < 10; i++)
{
pi_tasks.Add(Task.Factory.StartNew<double>(() => { return GetPiVAlue(1, 70000000); }));
}
Task finalTask = Task.Factory.ContinueWhenAll(pi_tasks.ToArray(), pi_val => { Console.WriteLine($"{ (pi_val.Sum(val => val.Result)) / (double)pi_val.Count() }"); });
finalTask.Wait();
Console.WriteLine("ccc");
end = DateTime.Now;
Console.WriteLine(end.Subtract(begin));
Console.ReadKey();
}
}
class Program // класс программы
{
// статическая функция получения рандомного числа
static double getDouble(Random rand)
{
return rand.NextDouble(); // возвращаем рандомное число
}
// статическая функция получения значения числа Пи
static double GetPiVAlue(int radius, double dots_count)
{
double dotsInCircleCount = 0; // точка на окружности
int radius2 = radius * radius; // радиус в квадрате
Random rand = new Random(); // создвние объекта класса для получения рандомного числа
for (int i = 0; i < dots_count; i++) // цикл создания точек на окнужности
{
double x = getDouble(rand) * radius; // получение значения х точки
double y = getDouble(rand) * radius; // получение значения у точки
if ((y * y) + (x * x) <= radius2) // проверяем не вышло ли точка за радиус окружности
dotsInCircleCount++; // увеличиваем число точек на окружности
}
return 4.0 * dotsInCircleCount / dots_count; // возвращаем значение
}
static void Main(string[] args)
{
double pi = 0; // создаем переменную Пи и инициализируем 0
DateTime begin = DateTime.Now; // получаем текущую дату и время
for (int i = 0; i < 10; i++) // цикл получения 10 значений пи
{
pi += GetPiVAlue(1, 70000000); // суммируем полученые значения
}
pi /= 10; // получаем среднее значение для 10 результатов
DateTime end = DateTime.Now; // получаем текущую дату и время
Console.WriteLine(end.Subtract(begin)); // получаем разницу по дате и времени (сколько затратили)
begin = DateTime.Now;// получаем текущую дату и время
List<Task<double>> pi_tasks = new List<Task<double>>(); // создаем список задач
for (int i = 0; i < 10; i++) // цикл создания 10 задач
{
pi_tasks.Add(Task.Factory.StartNew<double>(() => { return GetPiVAlue(1, 70000000); })); // добавляем новую задачу в список
}
Task finalTask = Task.Factory.ContinueWhenAll( // запуск на выполнения всех задач
pi_tasks.ToArray(), // приводим список а массиву
pi_val => { Console.WriteLine($"{ // выводим значение в консоль
(pi_val.Sum(val => val.Result)) // суммируем полученные значения от результатов вычисления
/ (double)pi_val.Count() // делем сумму на количество результатов
}"); });
finalTask.Wait(); // Ожидаем завершения задач
Console.WriteLine("ccc"); // выводим в консоле ccc
end = DateTime.Now; // получаем текущую дату и время
Console.WriteLine(end.Subtract(begin)); // получаем разницу по дате и времени (сколько затратили)
Console.ReadKey(); // ждем нажатия клавиши
}
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.