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

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

21.09.2013, 23:19. Показов 2280. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задание: три орудия производят стрельбу по трем целям. каждое орудие выбирает себе цель случайно,независимо от других.цель одним орудием поражается с вероятностью0,6. требуется осуществить моделирование этого эксперимента па пэвм.повторить эксперимент н раз в одних и тех же условиях и подсчитать относительную частоту события а= из трех целей поражены только две.
теоретически задача решается по формуле полной вероятности. эксперимент двухэтапный 1 этап- сколько мешеней будем обстереливать, 2-епосредственно стрельба, вычисление условных вероятностей. проблема в том, что не могу понять, как смоделировать,написать прогу, ПОМОГИТЕ!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2013, 23:19
Ответы с готовыми решениями:

Теория вероятности.
Начал изучать предмет который упомянут в теме. И на данную дисциплину не нашел задач, чтобы...

Теория вероятности
Для участия в судебном процессе из 20 потенциальных кандидатов, среди которых 8 женщин и 12 мужчин,...

Имитационная модель, теория вероятности
Здравствуйте! Тут есть задачка: Разработайте и запрограммируйте имитационная модель, которая...

Работа с массивом, теория вероятности
Здравствуйте. Задали задачку: Есть генератор случайных чисел, каждые 15 секунд в конец массива...

11
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
21.09.2013, 23:27 2
Наверное нужно использовать генератор случайных чисел.
C++
1
2
srand(time(0));
rand();
0
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
21.09.2013, 23:31  [ТС] 3
это ничем не поможет.
0
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
21.09.2013, 23:34 4
А что бы помогло?
1
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
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 Посмотреть сообщение
А что бы помогло?
Действительно, поведайте нам, раз уж Вы знаете, что, в рамках данной задачи, требуется использовать.
1
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
22.09.2013, 01:09 6
Имхо,
Цитата Сообщение от nic2009nik Посмотреть сообщение
это ничем не поможет
следует читать "это ничем мне не поможет"
0
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
23.09.2013, 13:25  [ТС] 7
AnyOne697, замечание по поводу правил оформления текста учту.
На всякий случай, "грамотно" пишется с одной буквой "м" и во фразе "Берем и стреляем" запятая не нужна.
Теперь по делу, мне действительно было не очень понятно как можно использовать генератор случайных чисел
применительно к данной задаче, поэтому и прошу развернутых объяснений.
Спасибо за код, но не понял, что значит res?? И может быть в последнем if добавить еще two == three && one != two
0
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
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. То есть ещё одного варианта не хватает, точно такого, который Вы и нашли.
1
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
23.09.2013, 13:45 9
изначально res вибирает мишень и возвращает ее номер при попадании. т.к. используетс остаток от деления, то индексация мишеней получается начинается с нуля. именно поэтому перед возвратом значение res увеличивается. Да и при промахе функция возвращает 0

Более того мне не понятен иф в конце, т.к. промахи получается тоже учитываются что ни есть гуд. Т.К. при 2 промахах и одном попадании получается счетчик наступлений события а увеличивается
0
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
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;
}
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
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;
}
0
1 / 1 / 0
Регистрация: 21.10.2012
Сообщений: 34
23.09.2013, 14:30  [ТС] 12
Цитата Сообщение от AnyOne697 Посмотреть сообщение
К слову да. Но бодем считать такую вероятность ничтожно малой =)
Разница между теоретическим ответом и тем, что получаем здесь около 0,2, признать ее ничтожно малой, увы, не выйдет.

Добавлено через 12 минут
HedgehogLu, спасибо. у Вас самое точное решение.
0
23.09.2013, 14:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2013, 14:30
Помогаю со студенческими работами здесь

Структура "ЭВМ". Определить какая ЭВМ имеет минимальное отношение стоимость/быстродействие
Даны 3 ЭВМ , известны объемы памяти, цена и быстродействие. Определить какая ЭВМ имеет минимальное...

"Теория вероятности Шейтона" и "Кодирование/дикодирование информации" (C++)
Всем здравструйте! :) Есть две задачки: &quot;Теория вероятности Шейтона&quot; и &quot;Кодирование/декодирование...

Теория вероятности. Расчет плотности вероятности суммы двух случайных величин
Добрый вечер уважаемые Форумчане :) Очень нужна помощь с практикумом по теории вероятности. Вот...

Теория вероятности(Плотность вероятности)
Ребята помогите пожалуйста решить задачи по теор.веру По учебе завал не успеваю сделать. 1....


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

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