Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Tip.the.besT
7 / 7 / 3
Регистрация: 01.04.2012
Сообщений: 98
#1

Кидаем кубики 100 миллионов раз

06.02.2016, 10:37. Просмотров 892. Ответов 7
Метки нет (Все метки)

Генерирую 100 миллионов случайных чисел в двух массивах. Собственно когда получается допустим 6*6, считаю сколько раз выпадет подряд. Дак вот. Интересный факт, если вызываю randomize только в начале процедуры то получаем максимально подряд 4-5, а если перед каждой генерацией, то 17-18. Я так понимаю если перед каждой генерацией вызывать не верно будет да?

код:
Delphi
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
procedure potok.Execute;
var
 k1: Array of integer;
 k2: Array of integer;
 b: Array[0..5] of integer;
  I,ii: Integer;
  pod:boolean;
begin
  randomize;
 
  SetLength(k1,100000000);
  SetLength(k2,100000000);
 
  b[5]:=0;
  for I := 0 to 100000000 do begin
    //randomize;
    k1[i]:=randomrange(1,7);
    k2[i]:=randomrange(1,7);
  end;
 
  pod:=false;
  ii:=0;
  for I := 0 to 100000000 do begin
    if (k1[i]=6)and(k2[i]=6) then begin
    inc(ii);
    end else begin
      if ii>0 then begin
        if b[5]<ii then
          b[5]:=ii;
        ii:=0;
      end else ii:=0;
 
    end;
 
  end;
 
 
  showmessage(inttostr(b[5]));
end;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2016, 10:37
Ответы с готовыми решениями:

Квадрат размером 100*100 уменьшается до 10*10. На его месте появляется круг и увеличивается, достигая 100 в диаметре
Квадрат размером 100*100 уменьшается до 10*10. На его месте появляется окружность и увеличивается,...

В txt больше 2 миллионов записей как вывести в StringGrid?
Ситуация такова, что если цикл увеличиваешь до 2 млн.,то вылезает ошибка Access violation at adress...

Игра Арканоид - как создать кубики на форме
как лучше создать кубики на форме с помощью массива или ставить по отдельности каждые(так мне...

Задача на подкидывание монеты. Кидаем 6 раз и находим вероятность,что герб упадет 3 раза
Решаю по формуле Якоба Бернулли Знаю,что не верно, но не понимаю,как правильно. Подскажите...

100 миллионов записей в БД - выборка, размер, нагрузка?
Поставили интересную задачу - хранить в БД порядка ста миллионов записей, конкретно - номера от 1...

7
Junkers1989
28 / 28 / 23
Регистрация: 26.12.2015
Сообщений: 154
07.02.2016, 19:49 #2
Насколько мне известно
Delphi
1
 randomize;
включает и выключает режим "случайности", соответственно при при вызове его на каждую процедуру, "случайными" будут только половина значений, остальные фиксированы для всех экземпляров программы. значит если есть необходимость использования следует однократно вызвать его в начале потока.
0
Tip.the.besT
7 / 7 / 3
Регистрация: 01.04.2012
Сообщений: 98
07.02.2016, 21:55  [ТС] #3
Цитата Сообщение от Junkers1989 Посмотреть сообщение
включает и выключает режим "случайности", соответственно при при вызове его на каждую процедуру, "случайными" будут только половина значений, остальные фиксированы для всех экземпляров программы. значит если есть необходимость использования следует однократно вызвать его в начале потока.
Не думаю, что всё так как ты говоришь.
Процедура Randomize используется вместе с функцией Random. Она устанавливает генератор случайных чисел в его последовательность из 232 псевдослучайных чисел.
0
AHBAR
239 / 239 / 167
Регистрация: 05.04.2013
Сообщений: 1,106
08.02.2016, 05:43 #4
Цитата Сообщение от Tip.the.besT Посмотреть сообщение
Процедура Randomize используется вместе с функцией Random. Она устанавливает генератор случайных чисел в его последовательность из 232 псевдослучайных чисел.
тогда нужно вызывать его почаще и случайные числа будут более "случайными"
0
Junkers1989
28 / 28 / 23
Регистрация: 26.12.2015
Сообщений: 154
08.02.2016, 18:22 #5
Цитата Сообщение от Tip.the.besT Посмотреть сообщение
Не думаю, что всё так как ты говоришь.
вот пример
Delphi
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
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
var
    i:integer;
begin
writeln('without randomize');
for i:=0 to 9 do
writeln(random(10));
writeln('generate using Randomize once');
randomize;
for i:=0 to 9 do
writeln(random(10));
 
writeln('generate using Randomize for each generation');
for i:=0 to 9 do
begin
randomize;
writeln(random(10));
end;
 
readln;
end.
вот несколько реализаций программы:
и более "случайные" последовательности мы получаем как раз при однократном вызове randomize
1
Миниатюры
Кидаем кубики 100 миллионов раз  
Junkers1989
28 / 28 / 23
Регистрация: 26.12.2015
Сообщений: 154
08.02.2016, 18:26 #6
Можно конечно заморочиться и посчитать корреляию для реализаций, тогда ответ будет еще более очевиден
0
AHBAR
239 / 239 / 167
Регистрация: 05.04.2013
Сообщений: 1,106
10.02.2016, 10:10 #7
Цитата Сообщение от Junkers1989 Посмотреть сообщение
и более "случайные" последовательности мы получаем как раз при однократном вызове randomize
хм, а по мне так последовательности 2 и 3 примерно одинаковы по категории "случайности"

Добавлено через 2 минуты
я думаю что более случайных чисел можно немного поморочиться и сделать следующее: ввести в код доп переменную, в которую в произвольный момент времени записываем например секунды или лучше миллисекунды текущего времени, так как они постоянно "бегают"
0
i8085
1763 / 1275 / 246
Регистрация: 11.09.2009
Сообщений: 4,500
10.02.2016, 10:52 #8
Лучший ответ Сообщение было отмечено Tip.the.besT как решение

Решение

Цитата Сообщение от Tip.the.besT Посмотреть сообщение
Я так понимаю...
Цитата Сообщение от Junkers1989 Посмотреть сообщение
Насколько мне известно...
Цитата Сообщение от Tip.the.besT Посмотреть сообщение
Не думаю, что всё так как ты говоришь.
Цитата Сообщение от AHBAR Посмотреть сообщение
тогда нужно вызывать его почаще...
Не надо гадать. Нужно взять и почитать "HELP".
Умные люди всё уже продумали и просчитали:
Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed.
Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.
2
10.02.2016, 10:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2016, 10:52

Кидаем монету, до тех пор, пока не выпадет N орлов
И вот эта еще спать не давала Кидаем монету, до тех пор, пока не выпадет N орлов. Найти...

Монету подбрасывают 100 раз
3. Монету побрасывают 100 раз. Найти вероятность того, что число выпавших гербов окажется больше 43.

100-ый раз про юникод
Здравствуйте есть такой кусок кода LRESULT CALLBACK LogWndProc(HWND hwnd, UINT Message, UINT...


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

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

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