|
уникальность сгенерируемого случайного числа в 1с 8 | ☑ | ||
---|---|---|---|---|
0
alinar
19.12.11
✎
00:06
|
Здравствуйте!Помогите проверить уникальность сгенерируемого случайного числа в следующем коде:
function Random() Экспорт a=1664525; c=1013904223; m=92949672; ПослЗначRND = Константы.КО_ПослЧислоRND.Получить(); rand = ?(ПослЗначRND=0,ТекущаяДата(),ПослЗначRND); rand=(a*rand+c)%m; Константы.КО_ПослЧислоRND.Установить(rand); //проверяем что такого кода нет return rand; endfunction |
|||
1
Живой Ископаемый
19.12.11
✎
00:08
|
что делать тем у кого нет КО_ПослЧислоRND?
|
|||
2
Жирафка
19.12.11
✎
00:10
|
(0) а чем типовой объект не устраивае?
ГСЧ = Новый ГенераторСлучайныхЧисел(255); ГСЧ.СлучайноеЧисло(0, 10000); |
|||
3
Живой Ископаемый
19.12.11
✎
00:17
|
короче код (0) не рабочий... кажды
|
|||
4
alinar
19.12.11
✎
00:19
|
(2)Было задание сделать самой.
(0)А что не нравится? |
|||
5
Живой Ископаемый
19.12.11
✎
00:22
|
2(4)"Преобразование значения к типу Число не может быть выполнено"
если у тебя Константы.КО_ПослЧислоRND равно 0, то ты получишь это сообщение |
|||
6
alinar
19.12.11
✎
00:25
|
(5)А как это справить?Подскажите,пожалуйста...
|
|||
7
Живой Ископаемый
19.12.11
✎
00:27
|
http://screencast.com/t/TJnZUJHyA
(6) что исправить? сообщение? не пытаться преобразовать дату в число. |
|||
8
alinar
19.12.11
✎
00:42
|
А можно прокомментировать построчно код из скриншота?(а то я новичок)
|
|||
9
Живой Ископаемый
19.12.11
✎
00:45
|
это ваш код, вы его комментируйте... Я только убрал оттуда получение константы потому что у меня ее нет
|
|||
10
alinar
19.12.11
✎
00:47
|
(9)Зачем заранее идентифицировать ПослЧислоRND=1?
|
|||
11
H A D G E H O G s
19.12.11
✎
00:49
|
мистец.
Какую задачу (глобально) решает аутор? |
|||
12
alinar
19.12.11
✎
00:49
|
Извиняюсь,Зачем заранее идентифицировать ПослЗначRND=1?
|
|||
13
Живой Ископаемый
19.12.11
✎
00:50
|
2(10) чтобы не словить (5) этоже очевидно...
|
|||
14
alinar
19.12.11
✎
00:51
|
Задача :Организация раздает подарочные сертификаты,у каждого сертификата должен быть уникальный серийный номер.
|
|||
15
Живой Ископаемый
19.12.11
✎
00:51
|
То есть у вас в коде
ПослЗначRND = Константы.КО_ПослЧислоRND.Получить(); а у меня ПослЗначRND = 1; вы зачем ее иницализируете константой? вот и я затем же.. тока у меня нет в конфе константы... я хотел было поставить 0, но словил ошмибку в (5) |
|||
16
Молодой 1Снег
19.12.11
✎
00:52
|
(14) Тут подойдет порядковый номер сертификата. Он вполне уникален :)
|
|||
17
Живой Ископаемый
19.12.11
✎
00:53
|
2(14) это порнуха а не задача... по куче причин, например :
а) У одного сертификата уникальный серийный номер равен "1", у второго "2356889" у третьего "БПОРЫЛ654" это достаточно уникальные серийные номера? |
|||
18
alinar
19.12.11
✎
00:56
|
(15) Тогда в конструкции rand = ?(ПослЗначRND=0,ТекущаяДата(),ПослЗначRND); rand никогда не присвоится ТекущееВремя!
(17)Формат номера тоже задан DDDD-DDDD,где D-цифры |
|||
19
H A D G E H O G s
19.12.11
✎
00:57
|
(17) Я бы тупо выбрал бы Первый по Убыванию и увеличил на единицу.
|
|||
20
Живой Ископаемый
19.12.11
✎
00:58
|
2(18) "Тогда в конструкции rand = ?(ПослЗначRND=0,ТекущаяДата(),ПослЗначRND); rand никогда не присвоится ТекущееВремя! "
и слава богу! потому что а) кто меня обязал чтобы присваивалось Б) как только присвоиться - строчка rand=(a*rand+c)%m; не выполниться по причине (5) |
|||
21
H A D G E H O G s
19.12.11
✎
00:58
|
(17) Воо!, см (18).
Выбрать Первый по Убыванию, убрать дефис, преобразовать в Число, инкремент, добавить Дефис, запись. И не надо городить огород. |
|||
22
Живой Ископаемый
19.12.11
✎
01:00
|
2(18) то есть если это ПОСЛЕДНЕЕ уточнение задачи - в ней нигде нет чтобы этот сертификат был СЛУЧАЙНЫМ?
|
|||
23
alinar
19.12.11
✎
01:02
|
(22)Номер сертификата д.б. сгенерированным случ числом!В этом все дело!
|
|||
24
Живой Ископаемый
19.12.11
✎
01:05
|
2(23) почему? кто сказал?
|
|||
25
alinar
19.12.11
✎
01:08
|
(24)Задание такое!!!Можете подсказать как сделать или нет?
|
|||
26
Живой Ископаемый
19.12.11
✎
01:10
|
как задание звучит полностью? без фантазий
|
|||
27
alinar
19.12.11
✎
01:14
|
(29)Повторюсь:Задача :Организация раздает подарочные сертификаты,у каждого сертификата должен быть уникальный серийный номер,где номер формируется с помощью ГСЧ с проверкой на уникальность.Если такой номер уже есть,то снова сгенерить.
|
|||
28
alinar
19.12.11
✎
01:15
|
(27)Причем номер вида DDDD-DDDD,где D цифра.
|
|||
29
FiftyStars
19.12.11
✎
02:29
|
(27) Гыг))вот гемор то развеели))
задачка достаточно простая если до 12 дня не решится вопрос то я приду домой и напишу)) |
|||
30
d_koz
19.12.11
✎
02:55
|
(27) Где в (0) проверка на уникальность номера из ранее выданных сертификатов?
Почему в (0) используются константы, а не регистр сведений? В константах вы запоминаете номер последнего выданного сертификата, а не все ранее выданные, поэтому гарантировать уникальность ваша конструкция из (0) не сможет. |
|||
31
Evil-Wisp
19.12.11
✎
05:25
|
(27)
ГСЧ = Новый ГенераторСлучайныхЧисел(); ГСЧ.СлучайноеЧисло(0, 99999999); //Каждый раз генератор будет инициализироваться временем работы операционной системы с момента старта. Вероятность выпадания 2-х одинаковых чисел мала. Если нужно прям обязательно контролировать, то РС. И проверять после генерации числа, не было ли его раньше. |
|||
32
guitar_player
19.12.11
✎
06:27
|
Не блокируй таблицу констант! Будь мужиком!
|
|||
33
Rie
19.12.11
✎
06:40
|
(27) Сгенерённые сертификаты ты в справочник пишешь? Ну и проверяй по этому справочнику, нет ли там такого номера.
Если нашёлся - то не просто генерируй следующий, а переинициализируй генератор (хотя бы текущим временем), ибо линейный ДПСЧ, ступив в свою колею, далее по ней и катится. |
|||
34
Amra
19.12.11
✎
07:39
|
(32) ПРедлагаешь девушке стать мужиком?)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |