15.12.2017, 03:46 [+3 UTC]
в нашей команде: 2 379 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
15.12.2017, 03:06

Последний вопрос:
15.12.2017, 01:47

Последний ответ:
15.12.2017, 00:41

Последняя рассылка:
14.12.2017, 20:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
16.08.2009, 17:47 »
Петрович_
Спасибо вам, ребята, за такой прекрасный сайт!!! Огромная БЛАГОДАРНОСТЬ Зенченко Константину Николаевичу, за помощь в решении таких трудных (для меня) проблем. Счастья, здоровья и удачи!
16.01.2011, 20:26 »
Denis Loran
Простым, понятным кодом, спасибо. [вопрос № 181899, ответ № 265449]
18.04.2012, 18:42 »
Arman Muratuly
спасибо за поправку в переводе с китайского. а как вы cos в sin переделали? [вопрос № 185846, ответ № 270567]

РАЗДЕЛ • .NET Framework / C# / Java

Создание программ на программной платформе .NET Framework и языках С# и Java.

[администратор рассылки: Коцюрбенко Алексей aka Жерар (Мастер-Эксперт)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 539
Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 432
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 293

Перейти к консультации №:
 

Консультация онлайн # 191541
Раздел: • .NET Framework / C# / Java
Автор вопроса: Посетитель - 399158 (Посетитель)
Отправлена: 26.10.2017, 12:34
Поступило ответов: 1

Здравствуйте! Прошу помощи в следующем вопросе:
Задание: Написать программу, параллельно вычисляющую значения числа
Пи методом Монте-Карло. Общее количество случайных точек для
всех параллельных потоков должно задаваться пользователем после
запуска программы. Результаты вычислений параллельных участков
после их завершения должны усредняться. Полученный результат
вывести на экран.
Можете написать что мы и где делаем? комментарии

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();
        }
    }

Состояние: Консультация закрыта

Ответ # 275406 от solowey (8-й класс)

Здравствуйте, Посетитель - 399158!

   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();	// ждем нажатия клавиши
        }
    }


Консультировал: solowey (8-й класс)
Дата отправки: 26.10.2017, 13:30

5
Спасибо большое, очень помогли.)
-----
Дата оценки: 26.10.2017, 14:04

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 191541
Посетитель - 399158
Посетитель

ID: 399158

# 1

= общий = | 28.10.2017, 10:38 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

а как вывести значение ПИ ил тасков?

solowey
8-й класс

ID: 400484

# 2

= общий = | 29.10.2017, 20:10 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

значение Пи выводиться

00:01:19.1380149
3,14161724571429
ccc
00:00:19.2890972

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16289 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн