Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.01.2010, 00:50
Аватар для r1x
r1x r1x вне форума
Начинающий
 
Регистрация: 15.07.2009
Адрес: KZ, Pavlodar
Сообщения: 110
Репутация: 10
Восклицание Случайное...

Привет всем!
В общем проблема такая не могу разобратся
Как можно сделать случайным образом вытаскивать данные и выводить их.
Данные можно вытащить при помощи номера индекса(от 0 до сколько угодно)

Допустим к примеру Listbox в нем 100 строк каждая строка имеет свой текст
как мне вытащить рандомно строки да бы они не посторялись и засуноть их номера в масив

Вот код того что я начал но он не верно работает

Код:
type
  recc = record
  Q_num: integer; // номер строки
  A_num: integer; 


var
Test[0..29] of recc;

 qCount:= List1.Items.Count;
 for q:=0 to 29 do
 begin
   repeat
   Randomize;
   ok:=0;
   qa:=Random(qCount);
   for q1:=0 to 29 do
     if Test[q1].Q_num<>qa then ok:=1;
   if q1=29 then ok:=1;  //<- Вот это строчка как бы лишняя но без нее циклит приложение если совпадает случайное значение с массивом
   until ok=1;
   Test[q].Q_num:=qa;
 end;

Плиз очень надо помогите...
__________________
[ iNewStar.Ru ] - Продам!
Вопросы в ПМ
Ответить с цитированием
  #2  
Старый 19.01.2010, 09:53
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Код:
function Unique(var flag: array of boolean; range: integer): integer;
begin
  result := random(range);
  while flag[result] do
    result := random(range); 
  flag[result] := true;
end;

 procedure Mass_of_Random(range: integer; var RND_Mass: array of integer);
var
  i: integer;
  bm: array of boolean;
begin
  SetLength(bm, length(RND_Mass));
  for i := 0 to length(RND_Mass) - 1 do
  begin
   RND_Mass[i] := Unique(bm, range);
  end;

Так можно сгенерить массив из уникальных рандомных чисел, ну а дальше понятно.
Ответить с цитированием
  #3  
Старый 19.01.2010, 10:22
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Как то так...Все в одной процедуре...
Код:
procedure TForm1.Button1Click(Sender: TObject);
type
 recc = record
  Q_num: integer; // номер строки
  A_num: integer;
 end;
var
 Test : array [0..9] of recc;
 qCount, q, ok, qa, q1 : word;
begin
 Randomize;//Достаточно запустить один раз
 qCount:= ListBox1.Items.Count;
 for q:=0 to qCount-1 do
 begin
  repeat
   ok:=0;
   qa:=Random(qCount);
   for q1:=0 to qCount-1 do
    if Test[q1].Q_num<>qa then
     ok := 1
    else
    begin
     ok := 0;
     break;
    end;
  until
   ok=1;
  Test[q].Q_num:=qa;
  ListBox2.Items.Add(IntToStr(Test[q].Q_num));
 end;
end;
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #4  
Старый 19.01.2010, 15:41
Аватар для r1x
r1x r1x вне форума
Начинающий
 
Регистрация: 15.07.2009
Адрес: KZ, Pavlodar
Сообщения: 110
Репутация: 10
По умолчанию

NIch & TOJluK большое спс!
__________________
[ iNewStar.Ru ] - Продам!
Вопросы в ПМ
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:50.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter