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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2009, 18:06   #1
severin
Пользователь
 
Аватар для severin
 
Регистрация: 23.04.2009
Сообщений: 17
По умолчанию Случайные числа

Подскажите пожалуйста, на форме есть 31 Edit нужно заполнить их поля редактирования двухзначными, случайными, отличными друг от друга числами, как это сделать?
severin вне форума Ответить с цитированием
Старый 03.11.2009, 18:35   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
ar: array[0..99] of integer;

for j:=0 to 99 do ar[j]:=j;//сгенерируем числа от 0 до 99

for j:=0 to 99 do 
begin
   k:=random(99);
   a:=ar[j];
   ar[j]:=ar[k];
   ar[k]:=a;
end;// перемешаем числа

for j:=0 to 30 do
begin
   s:=format('edit%d',[j]);
   t:=findcomponent(s);
   Tedit(t).text:=inttostr(ar[j]);
end;// заполним edit s первыми 31 из перемешанных
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 03.11.2009, 18:48   #3
severin
Пользователь
 
Аватар для severin
 
Регистрация: 23.04.2009
Сообщений: 17
По умолчанию

Спасибо буду пробовать

все работает только мне нужно чтобы выводилось число в формате 09 если оно однозначное и одно из чисел почему то 3936213 выпадает

Последний раз редактировалось Stilet; 02.02.2010 в 17:39.
severin вне форума Ответить с цитированием
Старый 03.11.2009, 19:13   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Супер! Кратко и по существу!
единственно, я подозреваю, что Edit'ы пронумерованы от 1 до 31..
поэтому правильнее будет так:
Код:
for j:=1 to 31 do
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.11.2009, 19:15   #5
severin
Пользователь
 
Аватар для severin
 
Регистрация: 23.04.2009
Сообщений: 17
По умолчанию

ну это я сразу изменил, а откуда это число? причем оно всегда припервой генерации выпадает в первом Edite

Последний раз редактировалось severin; 03.11.2009 в 19:17.
severin вне форума Ответить с цитированием
Старый 03.11.2009, 19:30   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
чтобы выводилось число в формате 09
замените код Tedit(t).text:=inttostr(ar[j]);
на код:
Код:
Tedit(t).text:= Format('%.2d',[ar[j]]);

Цитата:
ну это я сразу изменил, а откуда это число? причем оно всегда припервой генерации выпадает в первом Edite
приведите Ваш код полностью!

число всегда одно и то же?
кстати, не забываете в начале программы иницилизировать генератор сл.чисел?
Код:
Randomize;

Последний раз редактировалось Serge_Bliznykov; 03.11.2009 в 19:35.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.11.2009, 19:34   #7
severin
Пользователь
 
Аватар для severin
 
Регистрация: 23.04.2009
Сообщений: 17
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var

ar: array[0..99] of integer;
j,a,k:integer;
s:string;
t:TComponent;
begin

 for j:=10 to 99 do ar[j]:=j;//сгенерируем числа от 0 до 99

for j:=1 to 89 do
begin
   k:=random(99);
   a:=ar[j];
   ar[j]:=ar[k];
   ar[k]:=a;
end;// перемешаем числа

for j:=1 to 31 do
begin
   s:=format('edit%d',[j]);
   t:=findcomponent(s);
   Tedit(t).text:=inttostr(ar[j]);
end;// заполним edit s первыми 31 из перемешанных  }
end;


end.
Забыл про Randomize совсем, спаибо все работает

Последний раз редактировалось Stilet; 02.02.2010 в 17:40.
severin вне форума Ответить с цитированием
Старый 03.11.2009, 19:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
for j:=10 to 99 do ar[j]:=j
категорически не согласен!!
почему цикл от 10 ?!?!?!?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.02.2010, 17:35   #9
TREY
 
Регистрация: 29.07.2008
Сообщений: 3
По умолчанию

Извините за выражения, но всё что вы написали Г.Проверял сам, и нихрена оно не работает - раз через 3.
Вот 100% рабочий код:

Код:
procedure MassRand(range: integer; var inputMass: array of integer);
var
  i: integer;
  bm: array of boolean; 
  или нет
begin
  SetLength(bm, length(inputMass));
  for i := 0 to length(inputMass) - 1 do
  begin
    inputMass[i] := Unic(bm, range) + 1; //для последовательности 1,2, ... , N
    //inputMass[i]:=Unic(bm,range);//для последовательности 0,1, ... , N
  end;
end;

function Unic(var flag: array of boolean; range: integer): integer;
begin
  {данная функция возвращает одно случайное число}
  result := random(range);
  while flag[result] do
    result := random(range); //ищем какого числа еще нет
  flag[result] := true; //это чтобы не было повторений
end;
Пример использования: 

// Использовать можно по разному, например:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i: integer;
  mass: array of integer; //массив над которым будем извращаться
begin
  Memo1.Lines.Clear; //сюда выведем результат
  SetLength(mass, strtoint(Edit1.Text)); //тут получим размерность массива
  MassRand(strtoint(Edit1.Text), mass); //соответственно поимели процедуру
  for i := 0 to length(mass) - 1 do
  begin
    Memo1.Lines.Add(inttostr(mass[i])); //отобразили пользователю результат
  end;
end;

Последний раз редактировалось Stilet; 02.02.2010 в 17:41.
TREY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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
Delphi - Случайные числа Albenous Помощь студентам 2 28.12.2007 22:34