2017-01-23 112 views
0

我想实现一个可以生成伪随机序列的类。伪随机整数

构造函数应该有初始种子,乘数,增量和模数作为参数。一个成员函数应该允许改变种子,一个函数应该生成并返回伪随机序列中的下一个数字。

我的结果是错误的。我做错了什么,以及什么应该是正确的实施。对于伪随机序列

头文件

#include "pRandInt.h" 

pRandInt::pRandInt() 
{ 
    int newSeed = 0; 
    const int newMulti = 40; 
    const int newIncr = 725; 
    const int newMod = 729; 
} 

pRandInt::pRandInt(int seed, int multi, int incr, int mod) 
{ 
    newSeed = seed; 
    newMulti = multi; 
    newIncr = incr; 
    newMod = mod; 
} 

void pRandInt::setFirstNum(int seed) 
{ 
    newSeed = seed; 
} 

int pRandInt::getNextNum() 
{ 
    return (newMulti * newSeed + newIncr) % newMod; 
} 

主要测试文件的伪随机序列:

#include <iostream> 
#include "pRandInt.h" 

using namespace std; 
int main() 
{ 
    int seed = 0; 
    pRandInt num; 
    num.setFirstNum(seed); 
    cout << "The first number in your sequence is: "; 
    cin >> seed; 
    cout << "The other numbers in your sequence are: "; 
    cout << num.getNextNum() << endl; 
    system("pause"); 
    return 0; 
} 
+2

对于某些特定的输入,你期望得到什么结果,以及你实际得到了什么结果?你是否尝试过在调试器中的代码?至于“正确的实现”,那就是使用[标准的C++ PRNG功能](http://en.cppreference.com/w/cpp/numeric/random),而不是试图实现你自己的。 –

回答

1

你的问题就出在伪随机序列

#include<iostream> 
using namespace std; 

class pRandInt 
{ 
public: 
    pRandInt(); 

    //Default constructor with parameters 
    pRandInt(int, int, int, int); 

    //intial number in pseudorandom sequence 
    //permits the seed to be changed 
    void setFirstNum(int); 

    //generate the next number in the pseudorandom sequence 
    int getNextNum(); 

private: 
    int newSeed; 
    int newMulti; 
    int newIncr; 
    int newMod; 
}; 

实现文件这里:

int pRandInt::getNextNum() 
{ 
    return (newMulti * newSeed + newIncr) % newMod; 
} 

如果仔细观察该函数以及它的调用方式,您会注意到这些值中没有任何一个值会发生更改如果你想看到不同的输出,习惯上(有些人会说有必要)改变其中之一。

我的建议是(试图回答的如此明显的教育问题时,在一些事情上我倾向于皱眉)寻找到种子:-)


短的实际编写的代码对你来说,这是尽可能多的帮助,我可以给。但是,它应该是更多足以让你自己解决它。