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

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

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

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

20.03.2014, 22:54. Просмотров 510. Ответов 13
Метки нет (Все метки)

Помогите разобраться со статистической вероятностью. Программа легкая, но где-то ошиблась. Не могу понять, в чем накосячила. Смысл задачи в следующем: подбрасывают два кубика. Найти вероятность того, что сумма выпавших очков будет равна 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 22:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С++ статистическая вероятность подбрасывание кубика (C++):

Подкиньте линк на готовую библиотеку для прокладки кратчайшего пути от кубика А до кубика Б - C++
Привет! Есть ли у кого - то на примете библиотека для прокладки кратчайшего пути от точки А до точки Б на графическом поле типа как в MS...

Напишите программу, которая моделирует подбрасывание монеты - C++
Напишите программу, которая моделирует подбрасывание монеты. Для каждого подбра-сывания монеты программа должна печатать слова Heads или...

Смоделировать бросание игрального кубика - C++
Смоделировать бросание игрального кубика (то есть с помощью датчика случайных чисел получить одно из целых чисел 1, 2, …, 6) n раз каждым...

Про раскраску граней у кубика. - C++
Доброго времени суток! Я не еще мало чего смыслю в программировании,не могли бы вы помочь мне с одной задачей. В принципе примерно...

Вращение кубика вокруг начала координат - C++
В общем следующая проблема: кубик должен крутиться вокруг начала координат, но он странно искажается и &quot;убегает&quot;. Помогите пожалуйста....

Опишите структуры данных, которые могут сохранить информацию о состоянии «кубика Рубика» - C++
Опишите структуры данных, которые могут сохранить информацию о состоянии «кубика Рубика», как будут фиксироваться данные о цвете и...

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

Добавлено через 43 секунды
C++
1
p=(double)cnt/n
0
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
нет, все так же.... это не помогло.
0
saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:16 #6
скинь обновленный код...
0
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;
}
0
saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:26 #8
логика, вроде, правильная....
я бы убрал переинициализацию ГСЧ srand(time(NULL)); из цикла - достаточно одной (на суть это не влияет)
судя по синтаксису - это Майкрософт. Есть принт, но нет стдио...
опиши, что есть результатом вывода...

Добавлено через 3 минуты
еще момент (не критичный, но..)
rand%6 - это от 0 до 5
0
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 опытов. для каждого количества опытов нужно найти вероятность. а по сути все нули...
0
saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:41 #10
да это понятно...
ведь есть цикл 30-60, что выводит 30 нулей?
Попробуй поменять инт на дабл. С майкрософтом я не очень (есть особенности...)
0
JessB
0 / 0 / 0
Регистрация: 26.11.2012
Сообщений: 18
20.03.2014, 23:43  [ТС] #11
Цитата Сообщение от saden Посмотреть сообщение
да это понятно...
ведь есть цикл 30-60, что выводит 30 нулей?
Попробуй поменять инт на дабл. С майкрософтом я не очень (есть особенности...)
это я уже пробовала бесполезно. кстати, иногда выводит и все единицы. насколько я поняла, он округляет.
0
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();
}
С++ статистическая вероятность подбрасывание кубика
0
saden
183 / 167 / 41
Регистрация: 27.01.2013
Сообщений: 788
20.03.2014, 23:49 #13
правда, это на Борланде
0
grizlik78
Эксперт С++
1964 / 1457 / 119
Регистрация: 29.05.2011
Сообщений: 3,016
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;
}
0
22.03.2014, 01:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2014, 01:55
Привет! Вот еще темы с ответами:

Подбрасывание кубика - Теория вероятностей
Доброго всем времени суток, я начинающий, надеюсь вы мне подскажите правильное решение. У меня вот такие задачки: При подбрасывании двух...

Какова вероятность того, что все результаты бросаний кубика будут различны? - Теория вероятностей
Добрый день! Есть такая задача: игральный кубик бросают четыре раза.какова вероятность того,что все результаты бросаний будут различны? ...

Найти вероятность того, что при шестикратном бросании игрального кубика число очков меньшее трёх выпадет - Теория вероятностей
найти вероятность того, что при шестикратном бросании игрального кубика число очков меньшее трёх выпадет в половине случаев

Найти вероятность того, что два наудачу извлеченных кубика будут иметь точно две окрашенные грани - Теория вероятностей
4, Куб, все грани которого окрашены, распилен на 64 кубика одинакового размера, которые затем тщательно перемешаны. Найти...


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

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

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