Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.05;
Скачать: 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 вся ветка

Текущий архив: 2006.02.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1137162313
oldman
2006-01-13 17:25
2006.02.05
Флаговая морская азбука.


6-1130173528
Kostya
2005-10-24 21:05
2006.02.05
Обработка ошибок в TidHTTP


6-1130398948
Mikhail
2005-10-27 11:42
2006.02.05
Indy(IdHTTP)


8-1125100654
WST
2005-08-27 03:57
2006.02.05
Работа с PNG


2-1137650850
Nan
2006-01-19 09:07
2006.02.05
Авто инициализация переменной целого типа