ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

Random Numbers in Cpp

Updated on July 09, 2011

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.

 

Comments

    0 of 8192 characters used
    Post Comment

    • nicomp profile image
      Author

      nicomp really 7 years ago from Ohio, USA

      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
      Author

      nicomp really 7 years ago from Ohio, USA

      lotto! I like that. Good thought.

    • nicomp profile image
      Author

      nicomp really 7 years ago from Ohio, USA

      Has anyone used this program to predict lottery numbers?

    • khmohsin profile image

      khmohsin 7 years ago from London,UK

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

    • nicomp profile image
      Author

      nicomp really 7 years ago from Ohio, USA

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

    • profile image

      sreeiit 7 years ago

      This is a very useful and interesting post

    • nicomp profile image
      Author

      nicomp really 7 years ago from Ohio, USA

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

    Click to Rate This Article