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

Бросание двух костей. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
13.12.2010, 19:08     Бросание двух костей. #1
Помогите решить задачу про бросание костей:

Программа должна использовать rand для бросание 1 и 2 кости. Затем должна подсчитываться сумма двух значений. Поскольку каждая кость может показывать целое число от 1 до 6, то сумма может варьироваться от 2 до 12 с наиболее частым значением суммы 7 и наименее частыми 2 и 12. Используйте одномерный массив, чтобы подсчитывать, сколько раз выпадет каждая возможная сумма.

Решите пожалуйста, очень надо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
13.12.2010, 20:32     Бросание двух костей. #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
#include <iostream>
 
int main()
{
   int HOW = 10;        //количество бросков костей
   std::cout << "Введите количество попыток: ";
   std::cin >> HOW;
                        //количество возможных сум = 11
   int kol[11];
   for (int i = 0; i < 11; i++) kol[i] = 0;
                        //заполняем массив нулями
   while (HOW)
   {
      int k1, k2;       // 1 и 2 кубик
      srand(time(0));
      k1 = rand()%6+1;  //бросаем 1 кость
      srand(time(0));
      k2 = rand()%6+1;  //бросаем 2 кость
      kol[k1+k2-2]++;   //какая сумма выпала
      HOW--;            //уменьшаем количество бросков
   }
   
   for (int i = 0; i < 11; i++)
      std::cout << "Сумма " << i+2 << " выпадала " << kol[i] << " раз\n";
   return 0;
}
как-то неправильно она работает...

Добавлено через 3 минуты
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>
using namespace std;
 
int main()
{
   int HOW = 10;        //количество бросков костей
   cout << "Введите количество попыток: ";
   cin >> HOW;
                        //количество возможных сум = 11
   int kol[11];
   for (int i = 0; i < 11; i++) kol[i] = 0;
                        //заполняем массив нулями
   while (HOW)
   {
      int k1, k2;       // 1 и 2 кубик
 
      k1 = rand()%6+1;  //бросаем 1 кость
      k2 = rand()%6+1;  //бросаем 2 кость
      
      kol[k1+k2-2]++;   //какая сумма выпала
      HOW--;            //уменьшаем количество бросков
   }
   
   for (int i = 0; i < 11; i++)
      std::cout << "Сумма " << i+2 << " выпадала " << kol[i] << " раз\n";
 
   return 0;
}
так лучше
KOPC1886
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
13.12.2010, 20:46  [ТС]     Бросание двух костей. #3
Я в задаче забыл указать, что кости должны выбрасываться 36000 раз.
Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
13.12.2010, 21:06     Бросание двух костей. #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
#include <iostream>
using namespace std;
 
int main()
{
   int HOW = 36000;        //количество бросков костей
                        //количество возможных сум = 11
   int kol[11];
   for (int i = 0; i < 11; i++) kol[i] = 0;
                        //заполняем массив нулями
   while (HOW)
   {
      int k1, k2;       // 1 и 2 кубик
 
      k1 = rand()%6+1;  //бросаем 1 кость
      k2 = rand()%6+1;  //бросаем 2 кость
      
      kol[k1+k2-2]++;   //какая сумма выпала
      HOW--;            //уменьшаем количество бросков
   }
   
   for (int i = 0; i < 11; i++)
      cout << "Сумма " << i+2 << " выпадала " << kol[i] << " раз\n";
 
   return 0;
}
так пойдёт??
olok07
Сообщений: n/a
04.12.2013, 17:42     Бросание двух костей. #5
// нужно написать программу, моделирующую бросание двух костей.
// Естественно, что поочередно, т.е. один раз получаем рандомное число от 1 до 6 включительно и присваиваем его первой кости, а затем генерируем с помощью rand() второе рандомное число и присваиваем его второй кости.
//Далее программа подсчитывает сумму их значений. Ваша программа должна бросать две кости ровно 36000 раз.

#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <time.h>

void printar (int [], const int, const int);



using namespace std;

int main()
{
const int n = 11, l = 36000;
int ar [n] = {0};
int nam;
srand (time (0));
for (int i = 1; i < l; i++)
{
nam = 1 + rand () % 6;
nam += 1 + rand () % 6;
ar [nam - 2]++;
}

printar (ar, n, l);



return 0;
}

void printar (int ar [], const int n, const int l)
{
for (int i = 0; i < n; i++)
cout << setw (6) << i + 2;
cout << endl << endl;
for (int i = 0; i < n; i++)

cout << setw (6) << ar [i];
cout << endl << endl;
for (int i = 0; i < n; i++)
cout << setw (4) << "1/" << setw (2) << l / ar [i];
cout << endl;


}
//В первом ряду выводятся выпавшие сочетания очков, во втором ряду выводятся количества выпавших сочетаний,
// а в третьем - общее отношение всех моделирований к выпавшим данного типа.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
04.12.2013, 18:03     Бросание двух костей. #6
Mayonez, а ещё лучше использовать srand один раз в начале программы. Это сбросит сид генератора случайных чисел в сл учайное значение, связанное с текущим временем.
Если же вызывать srand в цикле, то генератор будет каждый раз сбрасываться в одно и то же значение: время-то на каждой итерации цикла не успевает измениться!
Yandex
Объявления
04.12.2013, 18:03     Бросание двух костей.
Ответ Создать тему
Опции темы

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