Goedenmorgen iedereen,
Hier weer een draadje in de coffee corner omdat ik van coffee houd en omdat ik denk
dat niet veel aan de vraagbaak toevoegd.
Weet iemand mischien of deze tot nu toe nog 'test' code is te optimaliseren ?
Het moet een routine worden die een lijst met random getallen genereerd die
'uniek' zijn, dus maar 1 maar voorkomend
Nu heb ik het getest op een Intel Celeron 500Mhz. met 128 meg, en het valt mij
een beetje tegen, mischien dat ik een vreselijk stomme fout maak maar ik zie e'm
even niet.
En mischien dat het wel veeeel simpeler kan.
Alvast bedankt.
Richard
Code:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
vList: TStringList;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
vList := TStringList.Create;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
vList.Free;
end;
procedure TForm1.Button1Click(Sender: TObject); {genereer een random list}
const
Tracks: Integer = 600;
var
RandomNumber: Extended;
ListCounter: Integer;
ItemCounter: Integer;
Found: Boolean;
StartTime, StopTime, ProcessTime: TDateTime;
begin
try
Screen.Cursor := crHourGlass;
Randomize;
vList.Clear;
ItemCounter := 0;
StartTime := Now;
while vList.Count < Tracks do
begin
ListCounter := 0;
Found := False;
RandomNumber := Random(Tracks);
if vList.Count = 0 then vList.Add(FloatToStr(RandomNumber));
while ListCounter < vList.Count do
begin
Inc(ListCounter);
if vList.Strings[ListCounter - 1] = FloatToStr(RandomNumber) then
begin
Found := True;
end;
end;
if not Found then vList.Add(FloatToStr(RandomNumber));
Inc(ItemCounter);
end;
finally
StopTime := Now;
ProcessTime := StopTime - StartTime;
Screen.Cursor := crDefault;
ShowMessage('List with '+ IntToStr(Tracks) + ' numbers generated in : ' + timetostr(ProcessTime)) ;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
LstNr: Integer;
begin
Memo1.Clear;
LstNr := 0;
while LstNr < vList.Count do
begin
Inc(LstNr);
Memo1.Lines.Add(vList.Strings[lstnr - 1]);
end;
end;
end.
Bookmarks