Google Answers Logo
View Question
 
Q: C++ PROGRAMING ( Answered 5 out of 5 stars,   0 Comments )
Question  
Subject: C++ PROGRAMING
Category: Computers > Programming
Asked by: purplepit-ga
List Price: $40.00
Posted: 28 Mar 2003 05:18 PST
Expires: 27 Apr 2003 06:18 PDT
Question ID: 182263
Using the Rand() function, can anyone answer this question, into a
program that runs

Part 1

As a first stage, develop and test your own random number function to
generate random numbers within a range. The function will have 2
integer arguments to indicate the low
and high values of the range. Thus a call
        cout << random(1,6);
would display a value between 1 and 6 (inclusive) - just like a normal
6-sided die. I suggest you use simple assertions to ensure that the
lower limit is not less than zero and the
upper limit is not less than the lower limit.
[This is a thinking problem. There is not an example in the notes to
show you how to do this. Try and work out the algorithm on paper
first.]

Part 2

Write a program that declares 2 lists of integers l1 & l2. Using your
random() function, generate 10 random numbers between 1 and 10 and
store them in l1, and another 10
between 1 and 6 (yes of course there will be duplicates!) and store
them in l2. Sort both lists using the sort() function, and then use
the merge() member function to leave the
combined list in l1. Display each list before and after merging. You
will have to work out how to use merge() from the (very brief) details
in the notes.
[I assume you can only merge lists that are sorted. You might like to
investigate what happens if either or both lists is not sorted.]

Part 3

We have used the following code several times to display a list: 
        for (it1 = l1.begin(); it1 != l1.end();
             it1++)
        {
           cout << *it1 << ", ";
        }
Clearly it should be possible to write a small function display()
which can be called using a call display(l1) . To make life a bit more
interesting we could allow the display()
function to be defined with arguments to specify leading and trailing
braces and a user-definable separator. Thus
        display(l1, '[', ']', ':') 
would display a sample list l1 as 
        [1:2:3:4:5]
The first argument of this function would be of type
        list<int>
Modify the program to use such a function (i.e. you must write this
display() function!) each time we display a list. (We shall see later
a better way of doing this.) My output
looks like this (I have used different characters to display the
merged list to make it look different):
Display the original lists ...
l1 : {2:8:5:1:10:5:9:9:3:5}
l2 : {6:6:2:4:2:6:2:3:4:1}
And now the merged list ...
Merged lists: [1 1 2 2 2 2 3 3 4 4 5 5 5 6 6 6 8 9 9 10]
Answer  
Subject: Re: C++ PROGRAMING
Answered By: theta-ga on 29 Mar 2003 07:49 PST
Rated:5 out of 5 stars
 
Hi purplepit-ga,
   The wording of your question left me slightly confused as to
whether we were allowed to use the C/C++ library's rand() function or
not. The first line says we can, while in Part 1 of your question you
say that we are to implement our own.
   So, since I had time to kill, I implemented two versions of the
solution, one which uses the rand() library function and one which
doesn't.

You can download a zip file containing the answer from
http://www31.brinkster.com/tanm/GA/Random.zip

The archive contains two folders, named [With Rand] and [Without
Rand]. Each folder contains three files, [Part1.cpp],[Part2.cpp] and
[Part3.cpp], which address the three parts of your question.

Here is an explaination of the solution :
   To get a random number between a given range, you can take the
following steps:
    - First generate a random number using any random number
algorithm. You can use the C++ rand() function, or define you own (see
below)
    - Calculate the range of numbers you are allowed. For example if
you are asked to generate a random number between 2 and 8, the range
of numbers is 8-2+1=7.
    - Performs a modulo operation on the random number generated in
the first step, with the range you calculated in the second step. For
eg., say the first step generated a random number N. In the second
step, you got the range 7. So, on performing the operation N % 7, we
will get a number from 0 to 6, depending on the value of N.
    - Take the value we got above, and add it to the lower limit of
the range, which in our example is 2. So, the value we get in this
step will range from 2+0 to 2+8, i.e from 2 to 8. This is exactly the
range we were given, so our purpose is accomplished.

If we are not allowed to used the inbuilt C++ rand() function, then we
will have to write our own pseudo random generator. The solution to
part 1 of your question remains the same. The only change is that in
the first step, instead of calling the C++ rand() function, you call
the one you wrote.

  If we are to write our own version of the C++ rand() function, we
will need a suitable algorithm. There are a large number of algorithms
available, employing a variety of computational techniques. For our
needs, we will use a very simple Linear Congruential algorithm. For a
simple and easy to understand explaination of this methodology, see
this article:
      - How Computers Generate Random Numbers: Chapter 4
        ( http://home1.gte.net/deleyd/random/random4.html )


Part 2 and Part 3 of your question are are pretty straight-forward.
Please see the comments in the relevant cpp files.

If you need more clarifications or modifications to the code, please
do not hesitate to ask. I will be glad to help. Please do not rate
this answer until you are completely satisfied with it.

Regards,
Theta-ga
:-)


===========================
Google Search Terms Used :
    c++ linear congruential random number algorithms
purplepit-ga rated this answer:5 out of 5 stars and gave an additional tip of: $10.00
Excellent Answer!! Thank you very much for your help.

Anthony

Comments  
There are no comments at this time.

Important Disclaimer: Answers and comments provided on Google Answers are general information, and are not intended to substitute for informed professional medical, psychiatric, psychological, tax, legal, investment, accounting, or other professional advice. Google does not endorse, and expressly disclaims liability for any product, manufacturer, distributor, service or service provider mentioned or any opinion expressed in answers or comments. Please read carefully the Google Answers Terms of Service.

If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you.
Search Google Answers for
Google Answers  


Google Home - Answers FAQ - Terms of Service - Privacy Policy