Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2008, 18:56   #1
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
Восклицание Случайно но не повторяясь!

Нужно как-то замутить случайную генерацию чисел от 1 до Х но чтобы каждое новое число не было сгенерино раньше!
uraura вне форума Ответить с цитированием
Старый 29.11.2008, 19:09   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Создать множество или динамический массив, и добавлять туда каждый раз сгенерированное число, и, соответсвенно, проверять есть ли в списке исключений это число.

на форуме есть решения подобных задач.
Alar вне форума Ответить с цитированием
Старый 29.11.2008, 19:09   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Стандартных функций нет, выход:
используем множество (set of) геним число random-ом, заносим его в множество, геним следующее, если оно в множестве, то геним ещё раз. Может и плохая идея, но простая.
zetrix вне форума Ответить с цитированием
Старый 29.11.2008, 19:26   #4
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

вот мой код он робит не так как надо пары чисел часто повторяются
первое число gl постоянно от 1 до 9
а второе nv от 1 до "" зависит от первого т.е. если gl=2 то nv=23

for i:=1 to 20 do
begin
gl:=IntToStr(random(8)+1); //здесь +1 для (1-9)
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Text:=
'SELECT MAX (Nvopr) FROM Vopros WHERE Glava =('+QuotedStr(gl)+')';
Query1.Open; //запрашиваю до какого числа генерить nv при уже сгенерином gl
maxnvopr:= Query1.Fields[0].Value;
nv:=IntToStr(random(maxnvopr)+1);
end;
uraura вне форума Ответить с цитированием
Старый 29.11.2008, 19:50   #5
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

Цитата:
Сообщение от zetrix Посмотреть сообщение
Стандартных функций нет, выход:
используем множество (set of) геним число random-ом, заносим его в множество, геним следующее, если оно в множестве, то геним ещё раз. Может и плохая идея, но простая.
Я уже думал так сделать, но как мне с парой чисел это проделать не представляю. Первоечисло может повторяться да и второе тоже, при условии, что первое отличается. В общем я в ступоре полном.
uraura вне форума Ответить с цитированием
Старый 29.11.2008, 19:52   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

берем упорядоченный массив 1..X
с помощью генератора перетасовывем его
считаем первые N элементов искомыми.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 29.11.2008, 20:27   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Я уже думал так сделать, но как мне с парой чисел это проделать не представляю. Первоечисло может повторяться да и второе тоже, при условии, что первое отличается. В общем я в ступоре полном.
Вы не знаете что Вам надо, и не можете это толково объяснить, потому и в ступоре. Такую генерацию с числами типа byte легче делать используя множества, большие числа через массив, много раз так делал, ничего сложного. Один раз написал процедуры и использую их.
puporev вне форума Ответить с цитированием
Старый 29.11.2008, 20:55   #8
uraura
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 87
По умолчанию

что мне надо?
У меня есть таблица, где по главам (9 глав) вбиты разное кол-во вопросов. Я делаю тест и мне нужно набрать 20 разных вопросов. вот и получается что глава может повторятся и номер вопроса тоже т.е. 1-1, 3-5, 3-1, 1-5, 1-1, 7-5....
uraura вне форума Ответить с цитированием
Старый 30.11.2008, 19:46   #9
Zeraim
Ra-Ra ?
Форумчанин
 
Аватар для Zeraim
 
Регистрация: 06.03.2008
Сообщений: 286
По умолчанию

Главам можно присвоить число, допустим 100, 200, 300... А вопросам в главах от 1 до 100, в итоге всегда у вопроса будет уникальное число.
Zeraim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Случайно ни укого нет компонента BUTTON с продвинутым канвом Altera Компоненты Delphi 1 04.02.2008 13:46