Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Маринусик
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 18
#1

Определить вероятности исходов боя бомбардировщика с истребителями - C++

29.04.2013, 21:55. Просмотров 1068. Ответов 5
Метки нет (Все метки)

Необходимо написать программу на С++.Происходит воздушный бой между бомбардмровщиком и двумя атакающими его истребителями. Стрельбу начинает бомбардировщик; он дает по каждому истребителю один выстрел и сбивает его с вероятностью р1. Если данный истребитель не сбит, то он независимо от судьбы другого стреляет по бомбардировщику и сбивает его с вероятностью р2. Определить вероятности следущих исходов боя:
А-сбит бомбардировщик
В- сбиты оба истребителя
С -сбит хотя бы один истребитель
D-сбит хотя бы один самолет
E-сбит ровно один истребитель
F-сбит ровно один самолет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2013, 21:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить вероятности исходов боя бомбардировщика с истребителями (C++):

Методом Монте-Карло определить вероятности - C++
Составить компьютерную программу, позволяющую с помощью метода Монте-Карло определить требуемые в варианте задания вероятности. Для всех...

Написание ИИ для Морского Боя - C++
Добрый день,помогите с написание АИ для морского боя , все сделал кроме АИ)Мы знаем размер поля количество кораблей и длина их так как это...

Трудности при написании Морского боя - C++
Пишу курсовик на тему морской бой. в среде VS 2010. проект пишется в Win32. идёт очень плохо по ряду причин, одна из которых моя...

Построение квадратного поля для морского боя - C++
Здравствуйте. Такой вопрос - Как сделать так чтобы поле для морского боя было не прямоугольное когда мы создаем массив 10*10 а квадратным? ...

Создать два поля для морского боя - C++
Для практики создайте программу рисующую на экране два поля для морского боя. Первое - игрока, второе - противника. Второе поле должно...

Найти вероятности, составить множества элементарных исходов - Теория вероятностей
1. Полная колода карт (52 листа) разбивается на 2 равные стопки по 26 карт. Найти вероятность того, что в одной из стопок окажется хотя бы...

5
IrineK
Заблокирован
02.05.2013, 04:14 #2
Раунд обмена ударами: 2 подряд выстрела Б, 1 выстрел И1, 1 выстрел И2
N – номер раунда

N = 1
А - сбит бомбардировщик
он оставил в живых хотя бы один И: (1 – p1^2),
и
мог быть сбит при выстреле И1: p2
или
сбит при выстреле И2: q2*p2
P(A) = (1 – p1^2)* (p2 + q2*p2) = (1 – p1^2)*p2*(1+q2) = (1 – p1^2)*p2*(2-p2)

В - сбиты оба истребителя
P(B) = p1^2

С - сбит хотя бы один истребитель
дополнительная вероятность к событию «не было сбито ни одного истребителя»
P(C) = 1 – q1^2

D - сбит хотя бы один самолет
дополнительная вероятность к событию «не было сбито ни одного самолета»
P(D) = 1 – (q1^2*q2^2)

E - сбит ровно один истребитель
первый выстрел Б удачный р1
или
второй выстрел удачный после первого неудачного q1p1
P(E) = p1 + p1q1 = p1*(1+q1)

F - сбит ровно один самолет
событие А
или
событие Е при условии что И1 и И2 не попали
P(F) = P(A) + P(E)*q2^2


Вероятность конца боя:
END: P(A) + P(B) – show over
Продолжение:
CONTINUE: 1 – (P(A) + P(B)) = PR – show goes on

Вероятности в каждом последующем раунде аналогичны, но умножаются на PR после каждого раунда. Т.е. для раунда N = n
PAn = PR^(n-1) * PA и т.д.

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
#include <iostream>
using namespace std;
 
void roundScore(double p1, double p2, double PR)
{   double PA, PB, PC, PD, PE, PF, q1, q2;
    q1 = 1. - p1;
    q2 = 1. - p2;
    
    PA = PR*(1. - p1*p1)*p2*(2. - p2);
    PB = PR*p1*p1;
    PC = PR*(1. - q1*q1);
    PD = PR*(1. - q1*q1*q2*q2);
    PE = PR*p1*(1.0 + q1);
    PF = PA + PE;
 
    cout<<"\tPA = "<<PA<<"\n\tPB = "<<PB<<"\n\tPC = "<<PC<<"\n\tPD = "<<PD<<"\n\tPE = "<<PE<<"\n\tPF = "<<PF<<"\n";
}
 
int main()
{   double p1,p2,PR;
    int round = 1;
    cout<<"p1 = ";
    cin>>p1;
    cout<<"p2 = ";
    cin>>p2;
 
    cout<<"Round "<<round<<"\n";
    roundScore(p1,p2,1.);
 
    PR = 1. - (1. - p1*p1)*p2*(2. - p2) - p1*p1;
 
    for(round=2; round<6; round++)
    {   cout<<"Round "<<round<<"\n";
        roundScore(p1,p2,PR);
        PR *= PR;
    }
 
 
    cin.sync();cin.get();
    return 0;
}
Ход боя в зависимости от умений противников:
0
Миниатюры
Определить вероятности исходов боя бомбардировщика с истребителями   Определить вероятности исходов боя бомбардировщика с истребителями  
IrineK
Заблокирован
02.05.2013, 07:01 #3
Было бы еще интересно написать эмуляцию боя - постараюсь сегодня сделать.
0
IrineK
Заблокирован
02.05.2013, 16:25 #4
Эмуляция:

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
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <ctime>
using namespace std;
 
int niceShot(double p)
{   int i,res;
    for(i=0; i<=rand()%100+1; i++) //shuffle and shuffle and...
        res = rand()%RAND_MAX;
    if(res/(RAND_MAX*1.) < p)
        return 1;
    return 0;
}
 
int main()
{   double p1,p2;
    int round = 1, bomber = 1, fighter = 2;
    cout<<"p1 = ";
    cin>>p1;
    cout<<"p2 = ";
    cin>>p2;
 
    srand((unsigned int) time(NULL));
 
    while(fighter>0)
    {   cout<<"\nROUND "<<round<<"\n";
        cout<<"\tBomber "<<bomber<<"\n";
        cout<<"\tFighter "<<fighter<<"\n";
 
        if(niceShot(p1)) 
        {   cout<<"One fighter down\n";
            fighter--;
        }
        if(fighter && niceShot(p1)) 
        {   cout<<"One fighter down\n";
            fighter--;
        }
        
        if(!fighter) break;
 
        if(niceShot(p2)) 
        {   cout<<"Bomber down\n";
            break;
        }
        if(niceShot(p2)) 
        {   cout<<"Bomber down\n";
            break;
        }
        round++;
    }
    
    cout<<"\nGAME OVER\n";
    
    cin.sync();cin.get();
    return 0;
}
При шансах 1 из 10000 на 4662 обмене выстрелами бомбер победил)

Некоторые выводы:
1) бить первым - выгодно
2) даже если шансы быть уничтоженным ничтожны, рано или поздно они реализуются
Поучительно )
0
Миниатюры
Определить вероятности исходов боя бомбардировщика с истребителями  
Маринусик
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 18
26.05.2013, 19:14  [ТС] #5
А как реализовать эту задачу на С++ методом Монте-Карло?
0
Маринусик
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 18
29.05.2013, 19:47  [ТС] #6
Что такое q1,q2 и PR
0
29.05.2013, 19:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2013, 19:47
Привет! Вот еще темы с ответами:

Высшая математика. Подсчет вероятности события по стаистике предыдущих исходов - Теория вероятностей
Вобщем есть к примеру монетка котороя подкидывалась 12 раз 1 герб 2 герб 3 герб 4 герб 5 герб 6 герб 7 решка 8 герб 9 герб

Что значит "счетное число исходов" для пространства элементарных исходов - Теория вероятностей
Здравствуйте, подскажите, пожалуйста, что значит &quot;счетное число исходов&quot; для пространства элементарных исходов. Спасибо

Шахматы: определить поля боя фигуры - Turbo Pascal
Для заданной шахматной фигуры стоящей на заданном поле шахматной доски определить все биты поля этой фигуры(те которые она может...

два бомбардировщика - Теория вероятностей
Два бомбардировщика поочередно сбрасывают бомбы на цель до первого попадания. Вероятность попа- попадания в цель первым...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru