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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2009, 23:28   #1
Nikkonofun
 
Регистрация: 14.02.2009
Сообщений: 5
По умолчанию Как получить неповторяющиеся случайные числа

Уважаемые программисты, знает ли кто-нибудь способ "случайного" выбора числа кроме Randomize и Random? Дело в том, что мне нужно сгенерировать массив из 250 случайных чисел и при использовании функции Randomize по многу раз подряд повторяется одно и тоже число.
Nikkonofun вне форума Ответить с цитированием
Старый 14.02.2009, 23:31   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А вы как записываете?
randomize нужно вызывать только один раз.
Пример:
Код:
randomize;
for i:=1 to n do
 begin
 a := random(20);
 writeln(a);
 end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 15.02.2009, 00:24   #3
Nikkonofun
 
Регистрация: 14.02.2009
Сообщений: 5
По умолчанию

Я пробовал вызывать Randomize как перед циклом так и в самом цикле, однако результат один и тот же. Думаю тут дело в том что Randomize обращаясь к системному таймеру и попадает на одно и то же время, поэтому получается одно и то же число. Все это изза слишком быстрого выполнения цикла. Когда я ставил в цикле например Delay(10000) генерировались разные числа, но такой вариант не очень подходящий так как генерация чисел занимает на порядок больше времени.
Nikkonofun вне форума Ответить с цитированием
Старый 15.02.2009, 00:30   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,182
По умолчанию

Какие проблемы с приведённым Sazary кодом?
Arigato вне форума Ответить с цитированием
Старый 15.02.2009, 03:00   #5
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Возможно это поможет. Здесь идет просто перемешивание в массиве.
Код:
var
  i,j: integer;
  a: integer;
  ar: array of integer;
  n: integer;
begin
Memo1.Clear;
n := 10;
Setlength(ar, n);
Randomize;

for i := 0 to High(ar) do ar[i] := i;
for i := High(ar) downto 0 do begin
 j := Random(i);
 a := ar[j];
 ar[j] := ar[i];
 ar[i] := a;
end;
Баламут вне форума Ответить с цитированием
Старый 15.02.2009, 03:27   #6
-HunteR-
Форумчанин
 
Аватар для -HunteR-
 
Регистрация: 04.11.2007
Сообщений: 117
По умолчанию

Nikkonofun
Ты хочешь, чтобы в массиве не было ни одного похожего числа?
Перед тем, как выложить код, я его всегда проверяю.
Если помог - тыкни на на весы слева, под аватарой.
-HunteR- вне форума Ответить с цитированием
Старый 15.02.2009, 10:18   #7
Nikkonofun
 
Регистрация: 14.02.2009
Сообщений: 5
По умолчанию

Баламут спасибо, предложенный тобой алгоритм помог.

-Hunter- мне нужно не обязательно не повторяющиеся числа, надо было сделать так, чтобы в массив не вводилось 250 одинаковых чисел подряд как это происходило, а чтобы предидущее число небыло таким как несколько последующих.
Nikkonofun вне форума Ответить с цитированием
Старый 15.02.2009, 14:22   #8
DeKot
Участник клуба
 
Аватар для DeKot
 
Регистрация: 12.08.2008
Сообщений: 1,977
По умолчанию

Вот еще вариант:
Код:
var
m: array [0..249] of byte;
x,y: integer;
i,j: byte;
procedure TForm1.FormPaint(Sender: TObject);
begin
  x:= 50; y:= 50;
  Randomize;
  Form1.Canvas.Font.Size:= 12;
  for i:= 0 to 249 do
  begin
    Form1.Canvas.TextOut(x,y,IntToStr(random(250)));
    Inc(j);  x:= x + 40;  
    if j = 15  then
    begin
       x:= 50;  y:= y + 30; j:= 0;
    end;
  end;
end;
И не сомневайся даже ... отдых - кайф, работа - лажа!
DeKot вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Псевдо случайные числа (Рандомизация) Demien Общие вопросы Delphi 7 16.07.2009 03:58
Случайные, но неповторяющиеся числа в StringGrid Andreyka Общие вопросы Delphi 1 06.02.2009 22:16
Случайные числа.... Teen4jump Общие вопросы Delphi 4 28.11.2008 23:52
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? SkAndrew Общие вопросы Delphi 2 10.11.2008 22:14
Delphi - Случайные числа Albenous Помощь студентам 2 28.12.2007 22:34