Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 29.08.2020
Сообщений: 2

Вычислить число Пи методом Монте-Карло

29.08.2020, 22:19. Показов 6557. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет. Нужно написать программу на языке С++, условие такое :
"Написать программу, вычисляющую число Пи при помощи метода Монте-Карло (генератора случайных чисел). "
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.08.2020, 22:19
Ответы с готовыми решениями:

Вычислить методом Монте-Карло площадь фигуры, ограниченной половиной синусоиды
Вычислить методом Монте-Карло: а) площадь фигуры, ограниченной половиной синусоиды; б) площадь фигуры, ограниченной квадратной...

Вычислить методом Монте-Карло
Помогите Вычислить методом Монте-Карло: а)площадь фигуры, ограниченной половиной синусоиды; б)площадь фигуры, ограниченной квадратной...

Вычислить интеграл методом Монте-Карло
\int \int_{G}^{}\ln(1 + {x}^{2} + {y}^{2})dxdy , G: {x}^{2} + {y}^{2} <= {a}^{2} (R: \pi )

5
Just Do It!
 Аватар для XLAT
4197 / 2652 / 654
Регистрация: 23.09.2014
Сообщений: 8,946
Записей в блоге: 3
30.08.2020, 10:04
Lineal,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <ctime>
#include <cstdlib>
 
static int rrand(int range_min, int range_max)
{   return rand() % (range_max - range_min + 1) + range_min;
}
 
///----------------------------------------------------------------------------|
/// Ñòàðò.
///----------------------------------------------------------------------------:
int main()
{   srand((unsigned)time(0));
    
    const unsigned NUMBER =  100000;
    unsigned   cnt =              0;
    unsigned  side =           1000;
    unsigned qside =   side *  side;
 
    for(int i = 0; i < NUMBER;  ++i)
    {
        unsigned x = rrand(0, side);
        unsigned y = rrand(0, side);
        
        if((x * x + y * y) < qside) ++cnt;
    }
    
    std::cout << double(cnt*4)/NUMBER << "\n";
}
думаю я взял не тот ГСПЧ.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
30.08.2020, 13:04
Лучший ответ Сообщение было отмечено Lineal как решение

Решение

На основе предыдущего кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <ctime>
#include <cstdlib>
 
// Функция вычисления площади круга радиуса R методом Монте-Карло
double SquareCircle(double R)
{
    const unsigned NUMBER = 10000000;
    double S = 0;
    unsigned cnt = 0;
    for (unsigned i = 0; i < NUMBER; ++i)
    {
        double x = R * rand() / RAND_MAX;
        double y = R * rand() / RAND_MAX;
        if ( x * x + y * y < R*R ) ++cnt;
    }
    return 4.0*R * R*cnt / NUMBER;
}
 
int main()
{
    srand((unsigned)time(0));
 
    double  R = 1.;
    std::cout << SquareCircle(R)/(R*R) << "\n";
    return 0;
}
p.s. Можно в функции сначала считать площадь единичного круга, тогда будет так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double SquareCircle(double R)
{
    const unsigned NUMBER = 10000000;
    double S = 0;
    unsigned cnt = 0;
    for (unsigned i = 0; i < NUMBER; ++i)
    {
        double x = (double)rand() / RAND_MAX;
        double y = (double)rand() / RAND_MAX;
        if ( x * x + y * y < 1.0 ) ++cnt;
    }
    return 4.0*R * R*cnt / NUMBER;
}
1
11 / 7 / 4
Регистрация: 27.08.2020
Сообщений: 34
30.08.2020, 13:25
zss, Number - это как бесконечность берётся?
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
30.08.2020, 13:29
Number - это количество испытаний в методе Монте-Карло.
cnt - количество удачных испытаний.
Соответственно, чем больше Number - тем больше точность
А от радиуса круга R ничего не зависит, его, в принципе, можно вообще сократить.
0
Just Do It!
 Аватар для XLAT
4197 / 2652 / 654
Регистрация: 23.09.2014
Сообщений: 8,946
Записей в блоге: 3
30.08.2020, 14:24
Лучший ответ Сообщение было отмечено Lineal как решение

Решение

Цитата Сообщение от XLAT Посмотреть сообщение
думаю я взял не тот ГСПЧ.
чуть поправил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <ctime>
#include <cstdlib>
 
inline int rrand(int range_max)
{   return rand() % (range_max + 1);
}
 
///----------------------------------------------------------------------------|
/// Старт. 3,14159
///----------------------------------------------------------------------------:
int main()
{   srand((unsigned)time(0));
    
    const unsigned NUMBER = 100000000  ;
    const unsigned  side  = RAND_MAX   ;
    const unsigned qside  = side * side;
          unsigned cnt    =           0;
 
    for(unsigned i = 0; i < NUMBER;  ++i)
    {   unsigned x = rrand(side),
                 y = rrand(side);
                 
        if ( x*x + y*y  < qside ) ++cnt;
    }
    
    std::cout << (4.*cnt) / NUMBER << "\n";
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.08.2020, 14:24
Помогаю со студенческими работами здесь

Вычислить значение числа методом Монте-Карло с точностью 0,0001
Вычислить значение числа методом Монте-Карло с точностью 0,0001. Помогите пожалуйста, ничего не могу найти(

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

Интегрирование методом Монте-Карло
доброго времени суток форумчане, была поставлена задача написать программу которая будет вычислять интеграл методом Монте-Карло вот что я...

Странный интеграл методом Монте-Карло
Вычислить интеграл методом монте-карло. Лекцию проболел, а из найденных источников нашел только как с обычными интегралами работать, не...

Вычисление площади методом Монте-Карло
Всем доброго время суток. Написать программу для вычисления методом Монте-Карло площади S тела, ограниченного кривыми x*y = a и x + y =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru