Имя: Пароль:
1C
 
уникальность сгенерируемого случайного числа в 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) ПРедлагаешь девушке стать мужиком?)))
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс