Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Question abour rand()

Reply
Thread Tools

Question abour rand()

 
 
Panagiotis Atmatzidis
Guest
Posts: n/a
 
      12-29-2009
Dear Sirs,

I'm looking for a way to create a random sequence of numbers using the =
'rand' method. I can think of something like:

-----
while pipi =3D=3D TRUE
if x > 1950 || x < 2000
return x
pipi =3D FALSE
------

Since however the book that I'm reading has not introduced while/else/if =
etc. I'm thinking that there must be an easier and probably more =
sensible way to approach this. As far as I've read rand(2000) will give =
random numbers from 0-to-2000 no matter what.

NOTE: I don't want to use another method just to do the job.

thanks in advance & best regards



Panagiotis (atmosx) Atmatzidis

email: http://www.velocityreviews.com/forums/(E-Mail Removed)
URL: http://www.convalesco.org
GnuPG ID: 0xFC4E8BB4=20
gpg --keyserver x-hkp://pgp.mit.edu --recv-keys 0xFC4E8BB4
--
The wise man said: "Never argue with an idiot. They bring you down to =
their level and beat you with experience."


 
Reply With Quote
 
 
 
 
Fleck Jean-Julien
Guest
Posts: n/a
 
      12-29-2009
Hello,

> I'm looking for a way to create a random sequence of numbers using the 'r=

and' method. I can think of something like:
>
> -----
> while pipi =3D=3D TRUE
> =A0if x > 1950 || x < 2000


Perhaps you were thinking of "and" rather than "or" because all number
is either greater than 1950 or smaller than 2000.

> Since however the book that I'm reading has not introduced while/else/if =

etc. I'm thinking that there must be an easier and probably more sensible w=
ay to approach this. As far as I've read rand(2000) will give random number=
s from 0-to-2000 no matter what.

Does 'rand(50) + 1950' do what you want ?

Cheers,

--=20
JJ Fleck
PCSI1 Lyc=E9e Kl=E9ber

 
Reply With Quote
 
 
 
 
Seebs
Guest
Posts: n/a
 
      12-29-2009
On 2009-12-29, Panagiotis Atmatzidis <(E-Mail Removed)> wrote:
> while pipi == TRUE
> if x > 1950 || x < 2000
> return x
> pipi = FALSE


Hmm. Looks as though you want the range 1951..1999. Well, that's easy
enough:

rand(49) + 1951

(Note that rand(49) returns anything from 0 to 48, inclusive.)

-s
--
Copyright 2009, all wrongs reversed. Peter Seebach / (E-Mail Removed)
http://www.seebs.net/log/ <-- lawsuits, religion, and funny pictures
http://en.wikipedia.org/wiki/Fair_Game_(Scientology) <-- get educated!
 
Reply With Quote
 
Marnen Laibow-Koser
Guest
Posts: n/a
 
      12-29-2009
Panagiotis Atmatzidis wrote:
> Dear Sirs,
>
> I'm looking for a way to create a random sequence of numbers using the
> 'rand' method. I can think of something like:
>
> -----
> while pipi == TRUE
> if x > 1950 || x < 2000
> return x
> pipi = FALSE
> ------
>
> Since however the book that I'm reading has not introduced while/else/if
> etc. I'm thinking that there must be an easier and probably more
> sensible way to approach this. As far as I've read rand(2000) will give
> random numbers from 0-to-2000 no matter what


Use Seebs' suggestion.

>
> NOTE: I don't want to use another method just to do the job.


Then you are probably being silly. It will make for more readable and
more reusable code if you encapsulate this in a method. Having lots of
short methods is generally a *good* thing.

>
> thanks in advance & best regards
>
>
>
> Panagiotis (atmosx) Atmatzidis
>
> email: (E-Mail Removed)
> URL: http://www.convalesco.org
> GnuPG ID: 0xFC4E8BB4
> gpg --keyserver x-hkp://pgp.mit.edu --recv-keys 0xFC4E8BB4


Best,
--
Marnen Laibow-Koser
http://www.marnen.org
(E-Mail Removed)
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Phillip Gawlowski
Guest
Posts: n/a
 
      12-29-2009
On 29.12.2009 18:00, Marnen Laibow-Koser wrote:

>> NOTE: I don't want to use another method just to do the job.

>
> Then you are probably being silly. It will make for more readable and
> more reusable code if you encapsulate this in a method. Having lots of
> short methods is generally a *good* thing.


"Walk before you run."

--
Phillip Gawlowski

 
Reply With Quote
 
Bertram Scharpf
Guest
Posts: n/a
 
      12-29-2009
Hi,

Am Dienstag, 29. Dez 2009, 18:51:53 +0900 schrieb Panagiotis Atmatzidis:
> I'm looking for a way to create a random sequence of numbers using the 'rand' method. I can think of something like:
>
> -----
> while pipi == TRUE
> if x > 1950 || x < 2000
> return x
> pipi = FALSE
> ------
>
> Since however the book that I'm reading has not introduced while/else/if etc. I'm thinking that there must be an easier and probably more sensible way to approach this. As far as I've read rand(2000) will give random numbers from 0-to-2000 no matter what.
>
> NOTE: I don't want to use another method just to do the job.
>
> thanks in advance & best regards


The "rand" method has been mentioned. Here are just some
considerations about the above code.

You don't need a loop for calculating a random value. (There is a
random algorithm below.) But when use a loop, then you either say
"return" or leave it by a condition but not both.

cond = true
while cond do
...
if some_condition then
cond = false
end
...
end

_or_

loop do
...
break if some_condition
...
end

Note that "break" can even return values:

result = loop do
break "hi"
end
result == "hi"

And here is an example of a very simple random implementation:

class R
def initialize
@r = 0
end
def nextval
@r = ((@r * 0xabcd) + 0x73737) % 0x1_0000_0000
@r >> 16
end
end
r = R.new
new_random_value = r.iterate
random_value_below_fifty = r.iterate % 50

Bertram


--
Bertram Scharpf
Stuttgart, Deutschland/Germany
*
Discover String#notempty? at <http://raa.ruby-lang.org/project/step>.

 
Reply With Quote
 
Brian Candler
Guest
Posts: n/a
 
      12-29-2009
Panagiotis Atmatzidis wrote:
> I'm looking for a way to create a random sequence of numbers using the
> 'rand' method.


Others have answered the 'random number between 1950 and 2000' bit.

In terms of creating a "sequence" of these values, here are a couple of
options to consider.

(1) Build an array.

a = []
10.times { a << rand(50) }

This array (a) is an object which can be returned, passed to other
functions etc. The above code hard-codes the number of values to build
(10), but you could choose this dynamically at run-time instead.

(2) Yield the values.

For code which wants to "return" multiple values, you can instead
"yield" the values to a block which the caller provides. You can yield
multiple times, thus calling the block multiple times. In other
programming languages you might call this a "callback function"

def generate_random(n=10)
n.times do
yield rand(50)
end
end

generate_random do |r|
puts "I got #{r}!"
end

Note that you can legitimately yield an infinite number of times,
because the block can abort the sequence when it wants. So in the
following example, the user of the function decides when they don't want
any more random numbers:

def generate_infinite
loop do
yield rand(50)
end
end

count = 0
generate_infinite do |r|
puts "I got #{r}!"
count += 1
break unless count < 10
end

A more advanced way to do this is with an 'Enumerator' object, but I'd
say you should start with the above for now.
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Quick Question - Newby Question =?Utf-8?B?UnlhbiBTbWl0aA==?= ASP .Net 4 02-16-2005 11:59 AM
Question on Transcender Question :-) eddiec MCSE 6 05-20-2004 06:59 AM
Question re: features of the 831 router (also a 924 question) Wayne Cisco 0 03-02-2004 07:57 PM
Confused abour 'ri' in 1.8.1? Frank Mitchell Ruby 9 01-02-2004 11:13 PM
Syntax Question - Novice Question sean ASP .Net 1 10-20-2003 12:18 PM



Advertisments