// Random number generator class (implementation independent) // // CONSTRUCTION: with no intializer (uses seed based on time) // // ***********************PUBLIC OPERATIONS****************************** // int RandInt() --> Return int in range [0..RAND_MAX) // int RandInt(int high) --> Return int in range [0..high) // int RandInt(int low, int high) --> Return int in range [low..high] // float RandReal() --> Return float in range [0..1) ///////////////////////////////////////////////////////////////////////// #ifndef _RANDGEN_H #define _RANDGEN_H #include // FOR rand, srand, RAND_MAX #include // FOR time() using namespace std; class RandGen { public: RandGen::RandGen() // constructor -- initializes the generator based on the current time { static int initialized = 0; if (initialized == 0){ initialized = 1; // ONLY CALL SRAND ONCE srand(int(time(0))); // RANDOMIZE } } int RandGen::RandomInt(int high = RAND_MAX) // Assumes: high >= 0 (if no input specified, uses maximum integer as default) // Returns: pseudo-random integer in range 0..high-1 { return rand() % high; } int RandGen::RandomInt(int low, int high) // Assumes: low <= high // Returns: pseudo-random integer in range low..high { return low + RandomInt(high-low+1); } double RandGen::RandomReal() // Returns: pseudo-random real in range [0..1) { return RandomInt() / double(RAND_MAX); } }; #endif