Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 31.03.2014
Сообщений: 26
1

Метод Монте-Карло (вероятность попадания при стрельбе)

30.05.2014, 17:52. Показов 2931. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем задача такова: Добавить Метод Монтекарло, что бы показывало всевозможные попытки расчета вероятности.
Сама задача: Производится стрельба двумя снарядами по k бакам с го-
рючим (k>2), расположенным рядом друг с другом в одну ли-
нию. Каждый снаряд независимо от других попадает в первый
бак с вероятностью p1 во второй – с вероятностью р2 и т. д. Для
воспламенения баков требуется два попадания в один и тот же
бак или два попадания в соседние баки. Оценить вероятность
воспламенения баков.
Код
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
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
 
int main()
{
using namespace std;
int num_of_tanks;
cout « "Enter number of tanks:\n";
cin » num_of_tanks;
vector<double> tanks(num_of_tanks);
cout « "enter posibilities for each tank:\n";
for (int i = 0; i < tanks.size(); i++)
{
cout « "posibility for " « i + 1 « ") tank: ";
cin » tanks[i];
}
if (accumulate(tanks.begin(), tanks.end(), 0) > 1)
cout « "To correct ansver sum of pisibilities must be no more, than 1\n";
 
//расчет вероятности двойного попадания
double double_hit = 0;
for (int i = 0; i < tanks.size(); i++)
double_hit += (tanks[i] * tanks[i]);
 
//вероятность попадания в соседние баки
double neibour_hir = 0;
for (int i = 0; i < tanks.size() - 1; i++)
neibour_hir += tanks[i] * tanks[i + 1];
for (int i = tanks.size()-1; i > 0; i--)
neibour_hir += tanks[i] * tanks[i - 1];
 
cout « "inflammation posibility = "
« neibour_hir + double_hit « "%" « endl;
 
cin.get();
cin.get();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2014, 17:52
Ответы с готовыми решениями:

метод Монте-Карло
всем привет, у меня вопрос по методу Монте - Карло, у меня есть код, #include &lt;stdlib.h&gt; #include...

Метод монте Карло
Здравствуйте! Посмотрите, пожалуйста, почему программа неправильно считает определенный интеграл...

Метод Монте-Карло
Помогите написать программу на С++. Из множества 1, 2, ..., n, случайным образом извлекается с...

Метод Монте-Карло
как мне перевести этот код на с++..... помогите пожалуста(( program MonteKarlo; uses crt; ...

7
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
30.05.2014, 18:00 2
Во-первых, ты где писал этот код? У тебя IDE (студия)-то установлена?
Если установлена, откуда в коде эта мерзость?
Цитата Сообщение от Shelby_ph Посмотреть сообщение
cout « "Enter number of tanks:\n";
Если бы ты мог писать хотя бы Hello world, ты бы знал как записывается оператор , применяемый к cout! Это << а не «
Ты точно хоть одну программу, хоть хеллоуворлд сам написал?
Далее, зачем ты считаешь эту муть типа
C++
1
double_hit += (tanks[i] * tanks[i]);
тебя же чётко просили! методом Монте-Карло! По-сути, надо многократно провести численный эксперимент со стрельбой по бакам, а не вычислять эмпирически по законам теорвера!
0
Arkaniy
30.05.2014, 18:03
  #3

Не по теме:

Kuzia domovenok, могу предположить, что код был скинут ТСу в Вк. Там в сообщениях заменяется << на «. Сам с этим мучаюсь, когда одногруппники кидают код с просьбами о помощи...

0
0 / 0 / 1
Регистрация: 31.03.2014
Сообщений: 26
30.05.2014, 18:03  [ТС] 4
Прошу прощения. Из контакта копиривал)
0
Arkaniy
30.05.2014, 18:04
  #5

Не по теме:

Как в воду глядел :)

0
0 / 0 / 1
Регистрация: 31.03.2014
Сообщений: 26
30.05.2014, 18:04  [ТС] 6
Покажите пожалуйста как надо)
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
30.05.2014, 18:43 7
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
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <vector>
#include <ctime>
#include <cstdlib>  
 
int main(){   
    int attempts, num_of_tanks;     
    std::cout<<"Input number of iterations (please more): ";
    std::cin>>attempts; 
    std::cout<<"Input number of tanks: ";
    std::cin>>num_of_tanks;
    std::vector<double> probs(num_of_tanks);
    std::vector<int>    Fbounds(num_of_tanks);
    std::cout << "enter hit probability for each tank:\n";
    for (int i = 0; i < probs.size(); ++i)
    {
        std::cout << "hit probability for (" << i + 1 << ") tank: ";
        std::cin >> probs[i];
        if (i)
            Fbounds[i]=Fbounds[i-1]+ probs[i]*RAND_MAX;
        else
            Fbounds[i]=probs[i]*RAND_MAX;
    }
    Fbounds[num_of_tanks-1]=RAND_MAX;
    srand(time(NULL));
    int triggered_counter=0;
    for (int i=0; i<attempts; ++i)
    {
        int random_key, random_hit1, random_hit2;
 
        random_key=rand();
        for(random_hit1=0; random_hit1<num_of_tanks && random_key>Fbounds[random_hit1]; ++random_hit1);  
        random_key=rand();
        for(random_hit2=0; random_hit2<num_of_tanks && random_key>Fbounds[random_hit2]; ++random_hit2);  
        if (abs(random_hit1-random_hit2)<=1)//если баки соседние
            ++triggered_counter;
    }
    double explosion= triggered_counter*1.0/attempts;
    std::cout<<"explosion probability "<< explosion*100<<"%"<<std::endl;
 
    std::cin.get();
    return 0;
}
1
0 / 0 / 1
Регистрация: 31.03.2014
Сообщений: 26
05.06.2014, 23:04  [ТС] 8
Пожалуйста! Поясните вот эту часть кода. 23-40. Помогите начинающему программисту)
0
05.06.2014, 23:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2014, 23:04
Помогаю со студенческими работами здесь

метод Монте-Карло
Трехмерное тело образовано объединением нескольких сфер произвольного размера и взаимного...

Метод Монте-Карло
Помогите написать программу для вычисления определенного интеграла методом Монте-Карло.

Метод Монте-Карло
С помощью метода Монте-Карло найдите оценку объема шара, центр которой совпадает с началом...

вроде метод монте карло
распишите пожалуйста что делает это программа?? int i,a,b,n,k,c,d,e,f; double s1,s,x,y,z; int...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru