![]() |
|
|
#1
|
||||
|
||||
|
Привет всем!
В общем проблема такая не могу разобратся Как можно сделать случайным образом вытаскивать данные и выводить их. Данные можно вытащить при помощи номера индекса(от 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;
Плиз очень надо помогите... |
|
#2
|
||||
|
||||
|
Код:
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
|
||||
|
||||
|
Как то так...Все в одной процедуре...
Код:
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
|
||||
|
||||
|
NIch & TOJluK большое спс!
|