Random Numbers in Cpp

This little software project illustrates techniques for working with random numbers in C++. The project consists of 3 individual files:

  1. main.cpp, the entry point for the application,
  2. RandomNumber.cpp, the demonstration code,
  3. and RandomNumber.h, the prototype for the RandomNumber method.

The target compiler is Visual Studio C++, but the code should be functional on any mainstream C++ compiler as well. GCC would be another possibility if you don't have Visual Studio.

There is no Random class, since C++ is a hybrid OOP language and all that legacy stuff must be supported. This code can be easily wrapped into a class if necessary.

To create the tutorial in Visual Studio, create each of the three files, below, then create a Visual Studio C++ project and add the three files to the project. The "Empty Project" type works well for this example. An Empty Project has no default modules added to it.

Object Oriented Programming. Random Numbers

/******************************************************************************
 * Fun with Random Numbers                                  RandomNumbers.cpp *
 *                                                                            *
 * Author: nicomp                                                             *
 * Abstract: Random Number stuff.                                             *
 *                                                                            *
 *                                                                            *
 *  Call randomize() to initialize the random number generator.               *
 *  Call srand(seed) to initialize the generator with a specific seed value.  *
 *  "Random" number sequences can be repeated by using the same seed.         *
 *                                                                            *
 * Revision History:                                                          *
 ******************************************************************************/

#include <iostream>
#include <stdlib.h>            // random(), srand() function prototypes
#include <time.h>              // time() function prototype
#include "RandomNumbers.h"

using namespace std;           // Not the default in some compilers

void RandomNumberDemo()
{
//  Using srand() allows repeatable random number sequences...
    srand(42);     // randomize using a specific seed. Any seed will work for this demo.

    cout << "\n integer random numbers...";
//  random returns a number between 0 and RAND_MAX in stdlib.h
    for (int i = 0; i < 5; i++)    cout << "\n => " << rand();

//  ====================================================================
    cout << "\n 3 decimal place floating point random numbers between 0 and 1...";
    srand(unsigned int(time(0)));                // Get a little more random
    for (int k = 0; k < 5; k++)    {
        int lottoNo;                // variable is local to this block
        float result;
        lottoNo= rand();
//      Generate a random # between 1001 and 1999 where the ones digit is not zero
        while (1)
        {
//            cout << "\n<<" << lottoNo << ">>";
            if ((lottoNo>= 1001) && (lottoNo<= 1999))    // between 1001 and 1999
                if ((lottoNo / 10) * 10 != lottoNo)        // does it have a non-zero last digit?
                    break;
            lottoNo = rand();
        }
        result = ((float)lottoNo / 1000) - 1;
        cout << "\n =>" ;

//      The numbers only have 3 decimal places anyway. This is not needed
//      cout.precision(4);        // This specifier resets after each output

        cout.width(6);            // Field width - blank padded on the left
        cout << result;
        cout << "<<";
    }
    cout << "\n"; // Just to clean up the display
}



RandomNumbers.h

// Include this header only once.
// It's not an issue in this particular project, but it's a good habit.
#pragma once
/******************************************************************************
 * Fun with Random Numbers                                    RandomNumbers.h *
 *                                                                            *
 * Author: nicomp                                                             *
 * Abstract: prototypes for random numbers functions in this demo.            *
 *                                                                            *
 * Revision History:                                                          *
 *                                                                            *
 *                                                                            *
 ******************************************************************************/

// Function Prototype
void RandomNumberDemo();

main.cpp

/******************************************************************************
 * main() for Fun with Random Numbers                                main.cpp *
*                                                                            *
 * Author: nicomp                                                             *
 * Abstract: Random Number stuff.                                             *
*                                                                            *
 * Revision History:                                                          *
 *                                                                            *
 *                                                                            *
 ******************************************************************************/

//#include <iostream>
#include "RandomNumbers.h"

using namespace std;

void main()
{
    RandomNumberDemo(); // invoke the demo function
}

Random numbers are useful in simulations and testing. The concept of the random number seed is important; in most cases we want a repeatable sequence of random numbers. If we can't repeat a set of test parameters, we can't replicate our results. Selecting the same seed guarantees that scenario.

In other words, we want numbers that are randomly distributed over a known range, but we need to retrieve the same sequence of numbers on-demand.

Random numbers can also be used to play the lottery, which, as we all know, is simply a tax on people who are bad at math.

Suggested Reading

C++ Primer Plus (5th Edition)
C++ Primer Plus (5th Edition)

I have used this book many times in classes I teach. It's wordy and thorough. The author even sprinkles in a little humor here and there.

 
The C Programming Language
The C Programming Language

Every self-respecting C++ programmer needs this book to look cool. If you don't have it, you might not be welcome as the lunch table with the other programmers.

 

More by this Author


Comments 8 comments

nicomp profile image

nicomp 7 years ago from Ohio, USA Author

This is my most popular hub. I don't know why. Perhaps random numbers are wildly popular.


someonewhoknows profile image

someonewhoknows 7 years ago from south and west of canada,north of ohio

It must be all the lotto players out there! lol Actually,there are a number of computers around the world,that just run random number generators .The purpose for this has something to do with consiousness.Some Scientists have discovered that when some major event like the twin towers being hit by planes ,or major earthquakes and the like cause these random number generators to change their random behaviour during such occurances.


nicomp profile image

nicomp 7 years ago from Ohio, USA Author

lotto! I like that. Good thought.


nicomp profile image

nicomp 7 years ago from Ohio, USA Author

Has anyone used this program to predict lottery numbers?


khmohsin profile image

khmohsin 6 years ago from London,UK

Good knowledge about programing ....Good Creative hub.


nicomp profile image

nicomp 6 years ago from Ohio, USA Author

My first hub. It still has a special place in my heart.


sreeiit 6 years ago

This is a very useful and interesting post


nicomp profile image

nicomp 6 years ago from Ohio, USA Author

@MattieStout: Please take your home loan spam elsewhere. We are serious about our random numbers.

    Sign in or sign up and post using a HubPages Network account.

    0 of 8192 characters used
    Post Comment

    No HTML is allowed in comments, but URLs will be hyperlinked. Comments are not for promoting your articles or other sites.


    Click to Rate This Article
    working