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

С++ статистическая вероятность подбрасывание кубика - C++

Восстановить пароль Регистрация
 
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 22:54     С++ статистическая вероятность подбрасывание кубика #1
Помогите разобраться со статистической вероятностью. Программа легкая, но где-то ошиблась. Не могу понять, в чем накосячила. Смысл задачи в следующем: подбрасывают два кубика. Найти вероятность того, что сумма выпавших очков будет равна 8. Нужно вывести результаты вероятностей через каждые 30 испытаний. В результате он выводит 0.

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
#include "clocale"
#include "time.h"
#include "iostream"
using namespace std;
 
int function(int n) // n- кол-во испытаний
{
    srand(time(NULL));
    int cnt=0; // счетчик, число положительных событий
    int a,b; // количество очков на первом и втором кубике
    for(int j=0; j<n; j++) 
    {
        srand(time(NULL));
        a=rand()%6;
        b=rand()%6;
        if(((a==2)&&(b==6))||((a==3)&&(b==5))||((a==4)&&(b==4))||((a==5)&&(b==3))||((a==6)&&(b==2))) cnt++;
    }
    double p=cnt/n;
 
    printf("%f",p);
 
    return p;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    for(int i=30;i<60; i++)
    {
    (   function(i));
    }
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 22:54     С++ статистическая вероятность подбрасывание кубика
Посмотрите здесь:

C++ Про раскраску граней у кубика.
Найти вероятность события А C++
C++ Напишите программу, которая моделирует подбрасывание монеты
C++ Вероятность действий
Вращение кубика вокруг начала координат C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 22:57     С++ статистическая вероятность подбрасывание кубика #2
int function
double p
return p;
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 23:12  [ТС]     С++ статистическая вероятность подбрасывание кубика #3
Цитата Сообщение от saden Посмотреть сообщение
int function
double p
return p;
поменяла int function на double, все равно ничего не изменило. так же выводит одни нули.
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:13     С++ статистическая вероятность подбрасывание кубика #4
не, не совсем прав...
p=cnt/n
это деление инт на инт

Добавлено через 43 секунды
C++
1
p=(double)cnt/n
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 23:15  [ТС]     С++ статистическая вероятность подбрасывание кубика #5
Цитата Сообщение от saden Посмотреть сообщение
не, не совсем прав...
p=cnt/n
это деление инт на инт

Добавлено через 43 секунды
C++
1
p=(double)cnt/n
нет, все так же.... это не помогло.
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:16     С++ статистическая вероятность подбрасывание кубика #6
скинь обновленный код...
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 23:18  [ТС]     С++ статистическая вероятность подбрасывание кубика #7
Цитата Сообщение от saden Посмотреть сообщение
скинь обновленный код...
как-то так.
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
#include "stdafx.h"
#include "math.h"
#include "clocale"
#include "time.h"
#include "iostream"
using namespace std;
 
double function(int n) // n- кол-во испытаний
{
    srand(time(NULL));
    int cnt=0; // счетчик, число положительных событий
    int a,b; // количсество очков на первом и втором кубике
    for(int j=1; j<=n; j++) 
    {
        srand(time(NULL));
        a=rand()%6;
        b=rand()%6;
        if(((a==2)&&(b==6))||((a==3)&&(b==5))||((a==4)&&(b==4))||((a==5)&&(b==3))||((a==6)&&(b==2))) cnt++;
    }
    double p=(double)cnt/n;
 
    printf("%f",p);
 
    return p;
 
}
int _tmain(int argc, _TCHAR* argv[])
{
    for(int i=30;i<60; i++)
    {
        function(i);
    }
    return 0;
}
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:26     С++ статистическая вероятность подбрасывание кубика #8
логика, вроде, правильная....
я бы убрал переинициализацию ГСЧ srand(time(NULL)); из цикла - достаточно одной (на суть это не влияет)
судя по синтаксису - это Майкрософт. Есть принт, но нет стдио...
опиши, что есть результатом вывода...

Добавлено через 3 минуты
еще момент (не критичный, но..)
rand%6 - это от 0 до 5
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 23:27  [ТС]     С++ статистическая вероятность подбрасывание кубика #9
Цитата Сообщение от saden Посмотреть сообщение
логика, вроде, правильная....
я бы убрал переинициализацию ГСЧ srand(time(NULL)); из цикла - достаточно одной (на суть это не влияет)
судя по синтаксису - это Майкрософт. Есть принт, но нет стдио...
опиши, что есть результатом вывода...

Добавлено через 3 минуты
еще момент (не критичный, но..)
rand%6 - это от 0 до 5
результатом вывода должна являться практическая вероятность. начальное количество опытов 30, конечное 1800. в сумме выходит 60 опытов. для каждого количества опытов нужно найти вероятность. а по сути все нули...
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:41     С++ статистическая вероятность подбрасывание кубика #10
да это понятно...
ведь есть цикл 30-60, что выводит 30 нулей?
Попробуй поменять инт на дабл. С майкрософтом я не очень (есть особенности...)
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 23:43  [ТС]     С++ статистическая вероятность подбрасывание кубика #11
Цитата Сообщение от saden Посмотреть сообщение
да это понятно...
ведь есть цикл 30-60, что выводит 30 нулей?
Попробуй поменять инт на дабл. С майкрософтом я не очень (есть особенности...)
это я уже пробовала бесполезно. кстати, иногда выводит и все единицы. насколько я поняла, он округляет.
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:48     С++ статистическая вероятность подбрасывание кубика #12
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
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
 
double function(int n) // n- êîë-ГўГ® èñïûòГ*Г*ГЁГ©
{
randomize();
int cnt=0; // Г±Г·ГҐГІГ·ГЁГЄ, ÷èñëî ïîëîæèòåëüГ*ûõ ñîáûòèé
int a,b; // êîëè÷ñåñòâî î÷êîâ Г*Г* ïåðâîì ГЁ âòîðîì ГЄГіГЎГЁГЄГҐ
for(int j=1; j<=n; j++)
{
a=rand()%6+1;
b=rand()%6+1;
if(((a==2)&&(b==6))||((a==3)&&(b==5))||((a==4)&&(b==4))||((a ==5)&&(b==3))||((a==6)&&(b==2))) cnt++;
}
double p=(double)cnt/n;
 
printf("%f\n",p);
 
return p;
 
}
int main()
{
for(int i=30;i<60; i++)
{
function(i);
}
return getch();
}
С++ статистическая вероятность подбрасывание кубика
saden
 Аватар для saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:49     С++ статистическая вероятность подбрасывание кубика #13
правда, это на Борланде
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 01:55     С++ статистическая вероятность подбрасывание кубика
Еще ссылки по теме:

C++ Имитация игры с костями, вероятность шести - наибольшая
Подкиньте линк на готовую библиотеку для прокладки кратчайшего пути от кубика А до кубика Б C++
Вычислить вероятность гипергеометрического распределения C++

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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
22.03.2014, 01:55     С++ статистическая вероятность подбрасывание кубика #14
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 <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <ctime>
 
using namespace std;
 
int function(int n, int sum) // n- кол-во испытаний
{
    int cnt = 0; // счетчик, число положительных событий
    int a, b; // количество очков на первом и втором кубике
 
    for (int j = 0; j < n; ++j)
    {
        a = rand() % 6 + 1;
        b = rand() % 6 + 1;
        if (a + b == sum) cnt++;
    }
 
    return cnt;
}
 
int main(int argc, char* argv[])
{
    srand(time(NULL));
 
    int cnt = 0;
    int n = 30;
    int const N = 1500;
    int i = 0;
 
    while (i < N)
    {
        if (i + n > N)
            n = N - i;
        cnt += function(n, 8);
        i += n;
        printf("i: %4d, p: %f\n", i, double(cnt) / i);
    }
    return 0;
}
Yandex
Объявления
22.03.2014, 01:55     С++ статистическая вероятность подбрасывание кубика
Ответ Создать тему
Опции темы

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