create your own

Random Numbers in Cpp

84
rate or flag this page

By nicomp


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 issues 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.
Price: $32.00
List Price: $59.99
The C++ Programming Language: Special Edition The C++ Programming Language: Special Edition
Price: $40.00
List Price: $84.99
C Programming Language (2nd Edition) C Programming Language (2nd Edition)
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.
Price: $37.80
List Price: $60.33

Comments

RSS for comments on this Hub

nicomp profile image

nicomp  says:
7 months ago

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

someonewhoknows profile image

someonewhoknows  says:
7 months ago

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  says:
7 months ago

lotto! I like that. Good thought.

nicomp profile image

nicomp  says:
6 months ago

Has anyone used this program to predict lottery numbers?

khmohsin profile image

khmohsin  says:
5 weeks ago

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

nicomp profile image

nicomp  says:
5 weeks ago

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

Submit a Comment

Members and Guests

Sign in or sign up and post using a hubpages account.


optional


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

  • Working With Collections In Java - Part 1

    A look at the Collections Framework of Java which provides a large set of popular data structures such as stacks, linked lists and dynamic arrays. Read This Java Tutorial - 16 months ago

  • Quicksort in Java

    A quick intro to the Quicksort algorithm in Java, showing an efficient (if not optimal) way to sort. Read This Java Tutorial - 17 months ago

working