Go Premium for a chance to win a PS4. Enter to Win

x
Solved

# random numbers

Posted on 2001-08-15
Medium Priority
207 Views
ive got this code in my program
timer4.interval:=4000;
now i want to make the 4000 a random number between
12000 and 32000 how do i do it ?
0
Question by:catbecks

LVL 1

Accepted Solution

Phoenix_s earned 400 total points
ID: 6390057
depending on what kind of granularity you require.... the process for generating the timer interval can be done a number of ways

you have a starting point at 12000 so that's a constant

the remainder is 20000 of which you need a randomized chunk

let's assume the startvalue is 12000
also let's assume you want granularity of 500 ticks

then endvalue would be 12000 + ((random(40)+1)*500)

because random(x) provides values from 0 -> (x-1)

we want 1 -> x  so we add 1 to the random before we multiply anything

let's assume you want granularity of 100 ticks

then endvalue would be 12000 + ((random(200)+1)*100)

let's assume you want granularity of 250 ticks

then endvalue would be 12000 + ((random(80)+1)*250)

let's assume you want granularity of 1000 ticks

then endvalue would be 12000 + ((random(20)+1)*1000)

does that help at all
0

LVL 4

Expert Comment

ID: 6390061
var
test : boolean;
num  : integer;
begin
test := false;
Randomize;
while not test do
begin
num := round((random) * 100000);
if (num >= 12000) and (num <= 32000) then test := true;
end;
timer4.interval:= num;
end;

0

LVL 6

Expert Comment

ID: 6391136
procedure TForm1.UpdateTimeInterval;
begin
Randomize;
Timer4.Interval := 12000 + Random(32000);
end;

I hope this helps,

Stu.
0

LVL 1

Expert Comment

ID: 6391421
ah hell  if you can do it...

pass parameters to the updatetimeinterval event as below..

procedure tform1.updatetimeinterval(offset,range,granularity:integer);
begin
randomize;
timer4.interval := offset + ((random(range div granularity)+1)* granularity);
end;

ex of use

updatetimeinterval(12000,20000,250);  will give a timerinterval of 12000 + 250 -> 20000 in increments of 250ms

or have application-wide or unit-wide variables declared as part of a initialization sequence at startup

offset#,
range#,
granularity# : integer;

you may have multiple timers with different rules so just stick in the appropriate timer's parameters as offset0, range0, and granularity0 for timer0, and so on...

procedure tform1.updatetime#interval;
begin
randomize;
timer#.interval := offset# + ((random(range# div granularity#)+1)* granularity#);
end;

replacing the # with timer #'s
0

LVL 9

Expert Comment

ID: 6391744
Hi catbecks,

here is my version :-)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
TTimer(Sender).Interval := 12000 + Random(32000-12000);
//
// rest of your code here
//
end;

initialization
// to avoid of the same sequences on every programm start
Randomize;
end.
0

## Featured Post

Question has a verified solution.

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

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
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…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an anti-spam), the admin…
Is your data getting by on basic protection measures? In today’s climate of debilitating malware and ransomware—like WannaCry—that may not be enough. You need to establish more than basics, like a recovery plan that protects both data and endpoints.…
###### Suggested Courses
Course of the Month10 days, 7 hours left to enroll