Другие языки программирования и технологии

Делфи, вывод в мемо случайных чисел без повторов из массива. массив от 1 до 35.

Всем привет, хочу вывести в мемо случайные числа без повторов от 1 до 35. Как это реализовать?
Вот мой код:
procedure TForm1.Button1Click(Sender: TObject);
var
a : array [1..35] of integer;
i, newPos, tmpA:integer;
begin
for i:=1 to 35 do a:=35 + i;
Randomize;

for i:=1 to 5 do begin
newPos := Random (10);
tmpA:= a[newPos];
a[newPos]:=a;
a:=tmpA;
memo1.Lines.Add(inttostr(tmpA));
end;

Выводится но значение выше 35... Код не мой, брал с какого то форума, пытался править под себя..
Denis Serpak
Denis Serpak
216
implementation

{$R *.dfm}

const
  Len = 35;

//Не прибегая к помощи математики
procedure TForm1.Button1Click(Sender: TObject);
var
  a: array [1 .. Len] of integer;
  i, k, n: integer;
begin
  n := Len;
  Memo1.Clear;
  for i := 1 to Len do
    a[і] := i;
  for i := 1 to Len do
  begin
    k := random(n) + 1;
    Memo1.Lines.Add(IntToStr(a[k]));
    a[k] := a[n];
    dec(n)
  end
end;

//С помощью предварительно рассчитанных или подобранных
//коэффициентов линейно-конгруэнтного генератора
procedure TForm1.Button2Click(Sender: TObject);
const
  m = 36;
  a = 13;
  c = 19;
var
  b: array [1 .. Len] of integer;
  i, Seed: integer;
begin
  Memo1.Clear;
  Seed := random(Len) + 1;
  for i := 1 to Len do
    b[і] := i;
  for i := 1 to m do
  begin
    Seed := (Seed * a + c) mod m;
    if Seed > 0 then
      Memo1.Lines.Add(IntToStr(b[Seed]))
  end
end;

initialization
  randomize;

end.
=Жаслан Рысов=
=Жаслан Рысов=
51 590
Лучший ответ
Попробуй так:
procedure TForm1.Button1Click(Sender: TObject);
var
N,f,g:integer;
a:array[0..35]of integer;
begin
Randomize;
N:=35;
for f:=1 to N do a[f]:=f;
for f:=1 to N do begin
g:=Trunc(Random*(N-f)+f+0.5);
memo1.Lines.Add(inttostr(a[g]));
a[g]:=a[f];
end;
end;
мой вариант проги 100% работает:
procedure TForm1.Button1Click(Sender: TObject);
var
w,e:integer;
q:array[1..35]of integer;
begin
for w:=1 to 35 do q[w]:=0;
w:=0;
while q[36]=0 do
w:=w+1;
randomize;
e:=Random(35);
if q[w] = 0 then q[w]:=e;
memo1.Lines.Add(inttostr(q[w]));
end;
end;
Пишите на почту или в асю 586178755
Samvel Vardanyan
Samvel Vardanyan
473

Похожие вопросы