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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2008, 21:22   #1
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию генерировать

как генерировать случайное число в ограниченном диапазоне
например от 50 до 100 и чтобы генерируемые числа не повторялись
StartMis вне форума Ответить с цитированием
Старый 16.10.2008, 21:24   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Спускаемся в самый низ этой страницы и читаем ответы.
mihali4 вне форума Ответить с цитированием
Старый 16.10.2008, 21:33   #3
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

как в диапазоне будет не знаю но можно так

procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,x:integer;
begin
Randomize;
i:=Random(100);
Memo1.Lines.Add(IntToStr(i));
end;
xakkkkker вне форума Ответить с цитированием
Старый 16.10.2008, 21:36   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i,x:integer;
begin
Randomize;
i:=Random(100);
Memo1.Lines.Add(IntToStr(i));
end;
Этот код можно немного упростить:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
Memo1.Lines.Add(IntToStr(Random(100)));
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 16.10.2008, 21:38   #5
StartMis
Форумчанин
 
Регистрация: 21.04.2008
Сообщений: 175
По умолчанию

мне именно надо в диапазоне
StartMis вне форума Ответить с цитированием
Старый 16.10.2008, 21:44   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от StartMis Посмотреть сообщение
мне именно надо в диапазоне
Тогда можно сделать так:

Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var
I: Integer;
Begin
Repeat
I:=Random(100);
If I > 50 Then
Begin
Memo1.Lines.Add(IntToStr(I));
End;
Until I > 50;
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 16.10.2008, 22:40   #7
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
Этот код можно немного упростить:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
Memo1.Lines.Add(IntToStr(Random(100)));
End;
без Randomize она при каждом старте будет генерировать одни и те жи чилса
xakkkkker вне форума Ответить с цитированием
Старый 16.10.2008, 23:01   #8
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
без Randomize она при каждом старте будет генерировать одни и те жи чилса
Спасибо за подсказку! Этого я не учёл... Следующий раз буду иметь в виду.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 16.10.2008, 23:13   #9
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
Спасибо за подсказку! Этого я не учёл... Следующий раз буду иметь в виду.
Всегда рад помочь
xakkkkker вне форума Ответить с цитированием
Старый 17.10.2008, 00:27   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
случайное число в ограниченном диапазоне
например от 50 до 100
Random(50)+50
Цитата:
чтобы генерируемые числа не повторялись
А вот это чуть-чуть посложнее...
Нужно или каждое число проверять - было ли оно ранее, или воспользоваться компонентом:
Код:
var
  L1 : TStringList;
begin
  L1 := TStringList.Create;
  L1.Sorted := True;
  L1.Duplicates := dupIgnore;
  Randomize;
  while L1.Count<20 {создадим 20 РАЗЛИЧНЫХ чисел} do
    L1.Add(IntToStr(Random(50)+50));

  {просто для демонстрации - кинем всё скопом в Мемо}
  Memo1.Lines.Clear;
  Memo1.Lines := L1;

  {очистим список со случайными числами}
  FreeAndNil(L1)
end;
недостаток такого подхода - все случайные числа будут отсортированы...

если так не подходит, то можно воспользоваться таким способом:
Код:
var
  L1 : TStringList;
  K  : integer;
begin
  L1 := TStringList.Create;
  Randomize;

  while L1.Count<20 {создадим 20 РАЗЛИЧНЫХ чисел}
  do begin
    K := Random(50)+50;
    if L1.IndexOf(IntToStr(K))=-1 then
       L1.Add(IntToStr(K));
  end;

  {просто для демонстрации - кинем всё скопом в Мемо}
  Memo1.Lines.Clear;
  Memo1.Lines := L1;

  {очистим список со случайными числами}
  FreeAndNil(L1)
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как с помощью xml-файла с генерировать БД в отчет MS Word quit БД в Delphi 3 21.02.2008 16:23
Генерировать массив без повтора значений элементов. На (С.) Raptor Помощь студентам 5 17.12.2007 14:42