Вниз
Скачать: CL | DM;

Как набрать правильно массив случайных чисел?   Найти похожие ветки 

 
kyn66 ©   (2005-12-28 15:22) [0]

Уважаемые мастера. Подскажите, каким образом мне набрать массив из 30 чисел случайными в диапазоне 1-:-90. В моем коде, представленном ниже, масив заполняется не верно, т.е. в него попадают значения 0-:-30, а где остальные? И почему при первом запуске присутствует у меня в массиве -1?

procedure TForm1.Button1Click(Sender: TObject);
Var
 i, j : Integer;
begin
 Randomize;
 ListBox1.Clear;
 for i := 1 to 30 do
  A[i] := -1;
 for i := 1 to 30 do
  begin
    j := Random(90);
    while A[j] <> -1 do
     j := Random(90);
    A[J] := i;
  end;
 for i := 1 to 30 do
  ListBox1.Items.Add(IntToStr(A[i]));
end;


Спасибо.


 
Verg ©   (2005-12-28 15:33) [1]

Randomize;

for i:= 1 to 30 do
  A[i] := random(90)+1;


 
Digitman ©   (2005-12-28 15:35) [2]

procedure TForm1.Button1Click(Sender: TObject);
Var
i : Integer;
begin
Randomize;
ListBox1.Clear;
for i := 0 to 29 do // цикл по элементам массива из значений 30-ти случ.чисел
 A[i] := Random(90) + 1;
 ListBox1.Items.Add(IntToStr(A[i]));
end;
end;


 
kyn66 ©   (2005-12-28 16:36) [3]

А где проверка на то, что эти числа не повторятся?


 
Digitman ©   (2005-12-28 16:47) [4]


> А где проверка на то, что эти числа не повторятся?


А ГДЕ это условие фигурирует в изначальном твоем вопросе ?!


 
Digitman ©   (2005-12-28 16:48) [5]


> kyn66 ©   (28.12.05 16:36) [3]


учись формулироватьт ТЗ.
оно полезно.
не для работы - для МОЗГОВ.


 
kyn66 ©   (2005-12-28 17:12) [6]

Согласен. Дополняю, числа не должны повториться.
Пардонс.


 
Verg ©   (2005-12-28 17:29) [7]

var
 A          : array[1..30] of integer;
 RandomPool : array[1..90] of integer;

procedure InitPool;
var I : integer;
begin
 for I := 1 to high(RandomPool) do
   RandomPool[I] := I;
end;

procedure IncPollIndex( var Index : integer );
begin
 inc( Index );
 if Index > high(RandomPool) then
  Index := 1;
end;

function PoolGetNumber( Index : integer ) : integer;
begin
 while RandomPool[ Index ] = -1 do
   IncPollIndex( Index );
 PoolGetNumber       := RandomPool[ Index ];
 RandomPool[ Index ] := -1;
end;

procedure Get30Random;
var I : integer;
begin
 Randomize;
 InitPool;
 for I :=1 to 30 do
   A[I] := PoolGetNumber( Random( high(RandomPool)) + 1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var I : integer;
begin
 Get30Random;
 ListBox1.Clear;
 for I := 1 to 30 do
   ListBox1.AddItem(IntToStr(A[I]), nil);
end;


 
Verg ©   (2005-12-28 17:31) [8]

Лексику сам поправь



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.037 c
1-1135863283
kyn66
2005-12-29 16:34
2006.02.05
Создание генератора случайных билетов.


2-1137492043
Tigraman
2006-01-17 13:00
2006.02.05
Hotkey и Unit


15-1136965696
Danilka
2006-01-11 10:48
2006.02.05
Маппирование клиентского COM-порта под терминалом сервера Win2k


2-1137521214
Vavan
2006-01-17 21:06
2006.02.05
Запись в риестр Windows


2-1137410005
Tigraman
2006-01-16 14:13
2006.02.05
Memo и checkbox




   Наверх