|
v8: Генератор чисел повторяет одно и то же число | ☑ | ||
---|---|---|---|---|
0
Sem0709
19.12.13
✎
16:26
|
8.1.14.72
Процедура КнопкаВыполнитьНажатие(Кнопка) Сообщить(ГенераторСлучайныхЧиселЗнач1()); Сообщить(ГенераторСлучайныхЧиселЗнач2()); Сообщить(ГенераторСлучайныхЧиселЗнач3()); КонецПроцедуры Функция ГенераторСлучайныхЧиселЗнач1() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло1 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло1; КонецФункции Функция ГенераторСлучайныхЧиселЗнач2() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло2 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло2; КонецФункции Функция ГенераторСлучайныхЧиселЗнач3() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло3 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло3; КонецФункции В общем суть в том, что при нажатии кнопки практически всегда выдает одно и тоже число. Это можно побороть ? |
|||
1
Fragster
гуру
19.12.13
✎
16:27
|
Перем ГСЧ;
а дальше в функциях Если ГСЧ <> Неопределено Тогда ГСЧ = Новый Генератор... КонецеСЛИ |
|||
2
mickey1cx
19.12.13
✎
16:35
|
СП говорит: Генератор случайных чисел инициализируется начальным числом из параметра.
Последовательность случайных чисел для одного и того же начального числа будет одинакова. Делай хотя бы так Функция ГенераторСлучайныхЧиселЗнач(НачальноеЧисло) ГенераторЧисел = Новый ГенераторСлучайныхЧисел(НачальноеЧисло); СлучайноеЧисло3 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло3; КонецФункции Сообщить(ГенераторСлучайныхЧиселЗнач(1)); Сообщить(ГенераторСлучайныхЧиселЗнач(2)); Сообщить(ГенераторСлучайныхЧиселЗнач(3)); |
|||
3
Hmster
19.12.13
✎
16:42
|
Получать новый уникальный идентификатор, преобразовывать в число, генерировать с начальным числом как в (2)
|
|||
4
andrewalexk
19.12.13
✎
16:43
|
(0) :) ..часом не 42?
|
|||
5
banco
19.12.13
✎
16:48
|
(3) или ТекущаяУниверсальнаяДатаВМиллисекундах(), но точно не помню в 8.1 была ли эта функция
|
|||
6
Wobland
19.12.13
✎
16:52
|
(0) дарю
Процедура КнопкаВыполнитьНажатие(Кнопка) Сообщить(8); Сообщить(3); Сообщить(4); КонецПроцедуры |
|||
7
Sem0709
19.12.13
✎
17:17
|
(1) Тоже самое... и надо в первый раз присваивать переменной значение, т.к. по умолчанию она Неопределено
(2) Тогда числа всегда одинаковые (4) Не понял !? (5) Не было. (6) Спасибо, зачем ? Мне вроде случайные нужны. (3) Курю как преобразовывать в число... |
|||
8
Fragster
гуру
19.12.13
✎
17:19
|
(7) надо ГСЧ сделать глобальной
|
|||
9
Wobland
19.12.13
✎
17:23
|
(7) они случайные. бросал кубик
|
|||
10
Sem0709
19.12.13
✎
17:24
|
(8) Не правильно понял твой пример сначало, но в любом случаи тоже что и у меня: числа повторяются на один клик.
34 34 34 35 35 35 40 40 40 |
|||
11
Wobland
19.12.13
✎
17:25
|
(10) не верю
|
|||
12
Sem0709
19.12.13
✎
17:26
|
(9) Не, не нужно, оставь, может самому сгодятся.
|
|||
13
Sem0709
19.12.13
✎
17:26
|
(11) Во что ? :)
|
|||
14
Fragster
гуру
19.12.13
✎
17:26
|
(10) не вижу кода
|
|||
15
Sem0709
19.12.13
✎
17:27
|
(11) так и есть, я прям сейчас пробую... может уже на более свежих версиях и по другому, но у меня так...
|
|||
16
Wobland
19.12.13
✎
17:28
|
(13) в твою искренность
Процедура КнопкаВыполнитьНажатие(Кнопка) КонецПроцедуры Функция ГенераторСлучайныхЧиселЗнач1() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло1 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло1; КонецФункции Функция ГенераторСлучайныхЧиселЗнач2() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло2 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло2; КонецФункции Функция ГенераторСлучайныхЧиселЗнач3() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); СлучайноеЧисло3 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло3; КонецФункции Сообщить(ГенераторСлучайныхЧиселЗнач1()); Сообщить(ГенераторСлучайныхЧиселЗнач2()); Сообщить(ГенераторСлучайныхЧиселЗнач3()); 26 35 7 |
|||
17
Fragster
гуру
19.12.13
✎
17:28
|
Перем ГенераторЧисел
Процедура КнопкаВыполнитьНажатие(Кнопка) Если ГенераторЧисел = Неопределено Тогда ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); КонецЕсли; Сообщить(ГенераторСлучайныхЧиселЗнач1(ГенераторЧисел )); Сообщить(ГенераторСлучайныхЧиселЗнач2(ГенераторЧисел )); Сообщить(ГенераторСлучайныхЧиселЗнач3(ГенераторЧисел )); КонецПроцедуры Функция ГенераторСлучайныхЧиселЗнач1(ГенераторЧисел ) СлучайноеЧисло1 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло1; КонецФункции Функция ГенераторСлучайныхЧиселЗнач2(ГенераторЧисел ) СлучайноеЧисло2 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло2; КонецФункции Функция ГенераторСлучайныхЧиселЗнач3(ГенераторЧисел ) СлучайноеЧисло3 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло3; КонецФункции |
|||
18
Sem0709
19.12.13
✎
17:34
|
(16) Ну вот попробуй сам... НЕ работает!
(17) Спасибо огромное. заработало!! После объявление глобальной переменной ";", если кто использовать будет. |
|||
19
Wobland
19.12.13
✎
17:34
|
(18) а ты думал, откуда я это скопипастил?
|
|||
20
Dirk Diggler
19.12.13
✎
17:59
|
омг.... я думал, даже детей учат инициализировать ГСЧ текущим временем...
|
|||
21
Fragster
гуру
19.12.13
✎
18:03
|
(20) ну инициализируй код в (0) текущим временем...
|
|||
22
Dirk Diggler
19.12.13
✎
18:09
|
(21) В подавляющем большинстве случаев подойдет:
Функция ГенераторСлучайныхЧиселЗнач1() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата())+ Минута(ТекущаяДата()) ); СлучайноеЧисло1 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло1; КонецФункции |
|||
23
Dirk Diggler
19.12.13
✎
18:10
|
а лучше так:
Функция ГенераторСлучайныхЧиселЗнач1() ГенераторЧисел = Новый ГенераторСлучайныхЧисел(Секунда(ТекущаяДата())+ Минута(ТекущаяДата())*60 ); СлучайноеЧисло1 = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло1; КонецФункции |
|||
24
Sem0709
19.12.13
✎
18:12
|
(23) Для одного подойет, а для трех в один в один момент будет три одинаковых числа.
|
|||
25
Dirk Diggler
19.12.13
✎
18:13
|
(24) Дык ГСЧ должен быть. Или мешает что?
|
|||
26
Dirk Diggler
19.12.13
✎
18:13
|
*глобальный
|
|||
27
Sem0709
19.12.13
✎
18:17
|
(26) Проблема что при выполнении события из (0) три одинковых числа получались...
|
|||
28
Sem0709
19.12.13
✎
18:37
|
Можно не использовать глобальную переменую:
Процедура КнопкаВыполнитьНажатие(Кнопка) ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); Сообщить(ГенераторСлучайныхЧиселЗнач1(ГенераторЧисел)); Сообщить(ГенераторСлучайныхЧиселЗнач2(ГенераторЧисел)); Сообщить(ГенераторСлучайныхЧиселЗнач3(ГенераторЧисел)); КонецПроцедуры Функция ГенераторСлучайныхЧиселЗнач1(ГенераторЧисел) СлучайноеЧисло = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло; КонецФункции Функция ГенераторСлучайныхЧиселЗнач2(ГенераторЧисел) СлучайноеЧисло = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло; КонецФункции Функция ГенераторСлучайныхЧиселЗнач3(ГенераторЧисел) СлучайноеЧисло = ГенераторЧисел.СлучайноеЧисло(5, 49); Возврат СлучайноеЧисло; КонецФункции Без функций: Процедура КнопкаВыполнитьНажатие(Кнопка) ГенераторЧисел = Новый ГенераторСлучайныхЧисел(); Сообщить(ГенераторЧисел.СлучайноеЧисло(5, 49)); Сообщить(ГенераторЧисел.СлучайноеЧисло(5, 49)); Сообщить(ГенераторЧисел.СлучайноеЧисло(5, 49)); КонецПроцедуры Как я понял, в (0) я в каждой функции создавал новый генератор, поэтому отображалось три одинаковых числа. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |