je to tak provizorne spravené, dá sa s tým pohrať. Toto je len aby si pochopil ako som to myslel a môžeš si to prerobiť
Kód:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
function moj_random(interval,nahodilost:integer):integer;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
pole:array of integer;
prvok:integer;
implementation
{$R *.dfm}
function Tform1.moj_random(interval,nahodilost:integer):integer;
var i,pom,rand,rand2:integer;
begin
if high(pole)=-1 then begin
setlength(pole,interval); //vytvorím si pole
for I:=0 to high(pole)-1 do begin //naplnim
pole[i]:=i;
end;
for I:=0 to nahodilost do begin
rand:=random(high(pole)); //nahodne cislo
rand2:=random(high(pole)); //druhé náhodne číslo
pom:=pole[rand]; //vymením tieto prvky
pole[rand]:=pole[rand2];
pole[rand2]:=pom;
end;
end;
inc(prvok); //skocim na dalsi prvok
if prvok>high(pole) then begin //ak som uz pouzil vsetky
showmessage('pole vycerpane');
result:=9999999; //dam o tom vediet
end else result:=pole[prvok]; //inak vratim hodnotu
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(moj_random(10,6) )); //chcem 10 rôznych hodnôt
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
prvok:=-1; //na začiatku resetnem hodnotu prvok
end;
end.