Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как исключить повторные значения при запуске функции Random? / 15 сообщений из 15, страница 1 из 1
20.11.2003, 10:19
    #32329705
Dmitriy Makeev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
Собственно то, что хотел спросить.

Спасибо.
...
Рейтинг: 0 / 0
20.11.2003, 10:25
    #32329720
Сашка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
ну ты задай диапазон побольше, например 1000000. вероятность появления повторного значения ничтожно мала
...
Рейтинг: 0 / 0
20.11.2003, 10:29
    #32329726
bjohny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
Можешь поюзать алгоритмя CRC
CRC16-> 5 чисел
CRC32-> 10 чисел
...
Рейтинг: 0 / 0
20.11.2003, 10:32
    #32329737
S.G
S.G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
Напр. создать массив всех возможных значений, и использовать
Random для того, чтобы эти значения перемешать один раз в начале.
Потом использовать массив.
...
Рейтинг: 0 / 0
20.11.2003, 10:35
    #32329741
viman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
В formcreate напиши randomize;

Viman
...
Рейтинг: 0 / 0
20.11.2003, 10:39
    #32329744
Сашка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
или также в Create формы, например, RandSeed := GetTickCount
...
Рейтинг: 0 / 0
20.11.2003, 10:48
    #32329754
Dmitriy Makeev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
В formcreate я и так запускаю Randomize. Из диапазона 1-300 пытаюсь выбрать 100 случайных значений. Попадаются повторы...
...
Рейтинг: 0 / 0
20.11.2003, 10:49
    #32329755
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
ну тогда проверяй - если повтор, то генери еще одно число
...
Рейтинг: 0 / 0
20.11.2003, 10:56
    #32329762
Dmitriy Makeev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
srf2000:

Вот как проверить и есть основная проблема :)
...
Рейтинг: 0 / 0
20.11.2003, 11:09
    #32329785
Сашка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
каждое генерируемое число добавляешь в массив, предварительно сравнив его с уже существующими элементами, если такое уже есть, то не добавляешь, а генеришь новое
...
Рейтинг: 0 / 0
20.11.2003, 11:20
    #32329797
Dmitriy Makeev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
Сашка:

Именно так я себе это и представляю, а написать не могу...
...
Рейтинг: 0 / 0
20.11.2003, 12:15
    #32329906
Сашка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
делается это с помощью рекурсивной функции. примерно вот так

procedure TForm1.Button1Click(Sender: TObject);
var
a: array [0..99] of Integer;
k, i: Integer;

function aaa(i: Integer): Integer;
var
j: Integer;
begin
k := Random(300);
for j := 0 to i-1 do
if a[j] = k then aaa(i);
Result := k;
end;

begin
a[0] := Random(300);
for i := 1 to 99 do
a := aaa(i);
end;
...
Рейтинг: 0 / 0
20.11.2003, 12:56
    #32329976
Askar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
Содай массив от 1 до 300. И обьяви второй массив в который будут заноситься случайные цифры из первого.
Потом включаешь random - выбрал цифру - перенес во 2 массив.
И главное: на месте выбранного в 1-ом массиве - пиши 0.
При выборке делай сравнение на 0, если true то repeat, если false то переноси во второй массив.
Работает быстро!
...
Рейтинг: 0 / 0
20.11.2003, 13:32
    #32330048
1man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
ИМХО лучше сделай булевский массив B размерностью N. Все в true. При генерации числа M проверяй значение B[M], если true, то это новое число и B[M]=false: если false - то это повторное знчение и надо генерить новое.
...
Рейтинг: 0 / 0
21.11.2003, 08:04
    #32330906
Dmitriy Makeev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как исключить повторные значения при запуске функции Random?
Проблему удалось более или менее удовлетворительно решить следующим образом:

procedure TForm1.Button1Click(Sender: TObject);
var
_a, _ar: Integer;
_abn: array[0..99] of Integer;

function aaa(): Integer;
var
j: Integer;
begin
j := 1;
_a := Random(300);
while j <= 100 do
begin
if _abn[j] = _a then
begin
_a := Random(300);
j := 0;
end;
j := j+1;
end;
Result := _a;
end;

begin
for _ar := 1 to 100 do
_abn[_ar] := 0;

for _ar := 1 to 100 do
begin
_abn[_ar] := aaa();

........

end;
end;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как исключить повторные значения при запуске функции Random? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]