Solved

Random

Posted on 2000-04-05
9
294 Views
Last Modified: 2010-04-04
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
0
Comment
Question by:Oli2
9 Comments
 
LVL 3

Accepted Solution

by:
ckaneta earned 100 total points
ID: 2687758
put randomize outside of the loop
0
 
LVL 1

Author Comment

by:Oli2
ID: 2687765
Edited text of question.
0
 
LVL 6

Expert Comment

by:DrDelphi
ID: 2687766
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
 
LVL 3

Expert Comment

by:hagur
ID: 2687769
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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 1

Author Comment

by:Oli2
ID: 2687770
Hi, ckaneta!

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

Regards, Oli
0
 
LVL 17

Expert Comment

by:inthe
ID: 2687791
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
 
LVL 1

Author Comment

by:Oli2
ID: 2687808
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
 
LVL 1

Expert Comment

by:umulig
ID: 2689047
ckaneta was first he should get the points.

Umulig
0
 
LVL 1

Expert Comment

by:sageryd
ID: 2689350
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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
This video shows how to remove a single email address from the Outlook 2010 Auto Suggestion memory. NOTE: For Outlook 2016 and 2013 perform the exact same steps. Open a new email: Click the New email button in Outlook. Start typing the address: …
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

943 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now