# Random

I need to create random numbers.

the output of

for n := 0 to 100 do
begin
Randomize;
x := Random ( 50 );
TMemo.Lines.Add ( IntToStr ( x ) );
end;

often looks like this:

5
5
5
5
5
5
33
33
33

how to avoid this and generate "real" random numbers?

like this:

34
7
29
44
2
17

By the way: I'm running a PIII500Mhz,
so I thought of the machine being too fast (Randomize has something to do with the system time) so I added some
Sleep ( Random (20) * Random (20));
Lines, but still no help.

A "Sleep ( 3000 );" does help, but makes it realy slow!

Regards, Oli
LVL 1
###### Who is Participating?

Commented:
put randomize outside of the loop
0

Author Commented:
Edited text of question.
0

Commented:
Move Randomize outside of the for loop:

var n,x:integer;
begin
Randomize;

for n := 0 to 100 do
begin
x := Random ( 50 );
Listbox1.items.Add ( IntToStr ( x ) );
end;

end;

Good luck!!

0

Commented:
Try this:

for n := 0 to 100 do
begin
Randomize;
x := Random ( 50 );
Memo1.Lines.Add ( IntToStr ( x ) );
Sleep(100);
end;

or even

for n := 0 to 100 do
begin
Randomize;
x := Random ( 50 );
Memo1.Lines.Add ( IntToStr ( x ) );
Sleep(500);
end;

This works perfectly for me, although on a slower machine, but hey ... a delay is a delay :)

-H
0

Author Commented:
Hi, ckaneta!

It seems you're right!!!
How come this behaviour?
Can you explain it?
(just being curious)

Regards, Oli
0

Commented:
from delphi help:(see last paragraph)

Initializes the random number generator with a random value.

Unit

System

Category

random number routines

procedure Randomize;

Description

Randomize initializes the built-in random number generator with a random value (obtained from the system clock). The random number generator should be initialized by making a call to Randomize, or by assigning a value to RandSeed.

Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.
0

Author Commented:
hmm, okay.
Now my problem: who to give the points to?
Suggestions?
I think of giving them to ckaneta - he was the first...
Is that okay with everybody?

Oli
0

Commented:
ckaneta was first he should get the points.

Umulig
0

Commented:
Agree! ckaneta was first. Does anyone have an idea on how the random function works? Is there any documentation about it somewhere? You don't have to answer asthough it wasn't I that put up the original Q.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.