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

теория вероятности на эвм - C++

Восстановить пароль Регистрация
 
nic2009nik
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
21.09.2013, 23:19     теория вероятности на эвм #1
задание: три орудия производят стрельбу по трем целям. каждое орудие выбирает себе цель случайно,независимо от других.цель одним орудием поражается с вероятностью0,6. требуется осуществить моделирование этого эксперимента па пэвм.повторить эксперимент н раз в одних и тех же условиях и подсчитать относительную частоту события а= из трех целей поражены только две.
теоретически задача решается по формуле полной вероятности. эксперимент двухэтапный 1 этап- сколько мешеней будем обстереливать, 2-епосредственно стрельба, вычисление условных вероятностей. проблема в том, что не могу понять, как смоделировать,написать прогу, ПОМОГИТЕ!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 23:19     теория вероятности на эвм
Посмотрите здесь:

C++ Теория вероятности.
Немного из архитектуры ЭВМ C++
"Теория вероятности Шейтона" и "Кодирование/дикодирование информации" (C++) C++
C++ архитектура ЭВМ на С++
Теория вероятности C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
21.09.2013, 23:27     теория вероятности на эвм #2
Наверное нужно использовать генератор случайных чисел.
C++
1
2
srand(time(0));
rand();
nic2009nik
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
21.09.2013, 23:31  [ТС]     теория вероятности на эвм #3
это ничем не поможет.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
21.09.2013, 23:34     теория вероятности на эвм #4
А что бы помогло?
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
22.09.2013, 00:00     теория вероятности на эвм #5
Цитата Сообщение от nic2009nik Посмотреть сообщение
задание: три орудия производят стрельбу по трем целям. каждое орудие выбирает себе цель случайно,независимо от других.цель одним орудием поражается с вероятностью0,6. требуется осуществить моделирование этого эксперимента па пэвм.повторить эксперимент н раз в одних и тех же условиях и подсчитать относительную частоту события а= из трех целей поражены только две.
теоретически задача решается по формуле полной вероятности. эксперимент двухэтапный 1 этап- сколько мешеней будем обстереливать, 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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int fire ( double chance ) {
    int res = rand () % 3;
    if ( rand () / double(RAND_MAX) < chance ) {
        return res + 1;
    }
 
    return 0;
}
 
int main() {
    double A = 0;
    for ( int i = 0; i < 100000; i++ ) {
        int one   = fire ( 0.6 ),
            two   = fire ( 0.6 ),
            three = fire ( 0.6 );
 
        if ( one == two && three != one || one == three && two != one ) {
            A++;
        }
    }
 
    cout << A / 100000 << endl;
 
    return 0;
}
UPD:
Цитата Сообщение от egor2116 Посмотреть сообщение
Наверное нужно использовать генератор случайных чисел.
Цитата Сообщение от nic2009nik Посмотреть сообщение
это ничем не поможет.
Цитата Сообщение от egor2116 Посмотреть сообщение
А что бы помогло?
Действительно, поведайте нам, раз уж Вы знаете, что, в рамках данной задачи, требуется использовать.
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,656
Записей в блоге: 1
22.09.2013, 01:09     теория вероятности на эвм #6
Имхо,
Цитата Сообщение от nic2009nik Посмотреть сообщение
это ничем не поможет
следует читать "это ничем мне не поможет"
nic2009nik
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
23.09.2013, 13:25  [ТС]     теория вероятности на эвм #7
AnyOne697, замечание по поводу правил оформления текста учту.
На всякий случай, "грамотно" пишется с одной буквой "м" и во фразе "Берем и стреляем" запятая не нужна.
Теперь по делу, мне действительно было не очень понятно как можно использовать генератор случайных чисел
применительно к данной задаче, поэтому и прошу развернутых объяснений.
Спасибо за код, но не понял, что значит res?? И может быть в последнем if добавить еще two == three && one != two
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
23.09.2013, 13:41     теория вероятности на эвм #8

Не по теме:

Цитата Сообщение от nic2009nik Посмотреть сообщение
На всякий случай, "грамотно" пишется с одной буквой "м" и во фразе "Берем и стреляем" запятая не нужна.
Ну да, так есть. Ошибся. Спасибо. Впрочем, я не спорю, людям свойственно ошибаться. Но ошибаться, а не делать вопреки систематически.


Цитата Сообщение от nic2009nik Посмотреть сообщение
Теперь по делу, мне действительно было не очень понятно как можно использовать генератор случайных чисел
применительно к данной задаче, поэтому и прошу развернутых объяснений.
Далее, не понял, что значит res?? И может быть в последнем if добавить еще two == three && one != two
Данная задача - симуляция случайных событий. Они по умолчанию случайны и без привлечения к симуляции случайных велечин она не решаема на ЭВМ. К счастью, можно построить ряд чисел, который будет похожим на случайный, используя только математические операции. Собственно, поэтому и используем int rand(), подругому никак.
int res - сокращение от английского result, очень похожего на русское слово результат. Собственно, это результат работы функции
C++
1
int fire ( double chance )
, который мы впоследствии возвращаем. На самом деле, она там не нужна, и можно чуть проще.
Чуть проще.
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 <cstdlib>
using namespace std;
 
int fire ( double chance ) {
    if ( rand () / double(RAND_MAX) < chance ) {
        return ( rand () % 3 ) + 1;
    }
 
    return 0;
}
 
int main() {
    double A = 0;
    for ( int i = 0; i < 100000; i++ ) {
        int one   = fire ( 0.6 ),
            two   = fire ( 0.6 ),
            three = fire ( 0.6 );
 
        if ( one == two && three != one || one == three && two != one || two == three && one != two ) {
            A++;
        }
    }
 
    cout << A / 100000 << endl;
 
    return 0;
}

Цитата Сообщение от nic2009nik Посмотреть сообщение
two == three && one != two
Ошибка найдена, будем считать материал усвоеным =)
А если быть честным, то я минут пять сидел и пытался просчитать все возможные вариант, хотя я знал, что из формулы количества сочетаний мы имеем ровно 3! / ( 2! * 1! ) = 3. То есть ещё одного варианта не хватает, точно такого, который Вы и нашли.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
23.09.2013, 13:45     теория вероятности на эвм #9
изначально res вибирает мишень и возвращает ее номер при попадании. т.к. используетс остаток от деления, то индексация мишеней получается начинается с нуля. именно поэтому перед возвратом значение res увеличивается. Да и при промахе функция возвращает 0

Более того мне не понятен иф в конце, т.к. промахи получается тоже учитываются что ни есть гуд. Т.К. при 2 промахах и одном попадании получается счетчик наступлений события а увеличивается
AnyOne697
 Аватар для AnyOne697
134 / 106 / 5
Регистрация: 22.05.2010
Сообщений: 532
23.09.2013, 13:47     теория вероятности на эвм #10
Цитата Сообщение от HedgehogLu Посмотреть сообщение
Более того мне не понятен иф в конце, т.к. промахи получается тоже учитываются что ни есть гуд. Т.К. при 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
#include <iostream>
#include <cstdlib>
using namespace std;
 
int fire ( double chance ) {
    if ( rand () / double(RAND_MAX) < chance ) {
        return ( rand () % 3 ) + 1;
    }
 
    return 0;
}
 
int main() {
    double A = 0;
    for ( int i = 0; i < 100000; i++ ) {
        int one   = fire ( 0.6 ),
            two   = fire ( 0.6 ),
            three = fire ( 0.6 );
 
        if ( one == two && three != one && one != 0 ||
        one == three && two != one && one != 0 ||
        two == three && one != two && two != 0 ) {
            A++;
        }
    }
 
    cout << A / 100000 << endl;
 
    return 0;
}
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
23.09.2013, 13:57     теория вероятности на эвм #11
имхо это грубо нарушение алгоритмики а не ничтожно малое отклонение.
более того подсчет попаданий можно считать более просто
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    double A = 0;
    small targets[4];
    for ( int i = 0; i < 100000; i++ ) 
    {
        targets[0]=0;
        targets[1]=0;
        targets[2]=0;
        targets[3]=0;
        targets[fire ( 0.6 )]=1;
        targets[fire ( 0.6 )]=1;
        targets[fire ( 0.6 )]=1;
        if ((targets[1]+targets[2]+targets[3])==2) A++;
     }
    cout << A / 100000 << endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 14:30     теория вероятности на эвм
Еще ссылки по теме:

эвм-умножение со сдвигом влево на c++ C++
Имитационная модель, теория вероятности C++
ОС и архитектура ЭВМ C++

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

Или воспользуйтесь поиском по форуму:
nic2009nik
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
23.09.2013, 14:30  [ТС]     теория вероятности на эвм #12
Цитата Сообщение от AnyOne697 Посмотреть сообщение
К слову да. Но бодем считать такую вероятность ничтожно малой =)
Разница между теоретическим ответом и тем, что получаем здесь около 0,2, признать ее ничтожно малой, увы, не выйдет.

Добавлено через 12 минут
HedgehogLu, спасибо. у Вас самое точное решение.
Yandex
Объявления
23.09.2013, 14:30     теория вероятности на эвм
Ответ Создать тему
Опции темы

Текущее время: 00:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru