2014-10-03 62 views
0

嗨,我是一個新手在這裏,我希望能夠在這裏休息。 上學期,我們處理的隨機數發生器我和我的朋友,我們能夠拿出一個簡單的程序(如下),它的工作:Main.cpp和隨機數發生器的函數C++

using namespace std; 

int randomG() { 
    int GER(0); 
    GER=rand(); 
    GER %= 10; 
    GER++; 
    return(GER); 
} 

int main() { 
    srand((unsigned)time(NULL)); 
    for(int i = 0; i != 100; i++) { 
     cout << randomG(); 
    } 
} 

現在,這學期我們得到了這個給沒有去太多了進去。基本上他希望我們用main.cpp實現隨機數生成器,它多次調用函數FNC來測試我們需要使用state = 1作爲初始值的程序。從主程序調用FNC。經過10000個電話:國家應該等於399268537(不明白什麼意思,他在這裏)

下面是我們的出發點:

double rand (void) { 
    const long a=48271   //multiplier 
    const long b=2147483647  //modulus 
    const long c=b/a    //questient 
    const long r=b % a   //remainder 
    static long state =1; 
    long t = a* (state % c) - r * (state/c); 
    if(t >0) 
     state=t; 
    else 
     state = t+b; 
    return ((double) state/b); 
} 

的main.cpp中,我們該怎麼做完全喪失,我們我們不知道如何調用功能 ,併爲程序輸出中的第1到第10個呼叫和9991到10000個FNG呼叫提供一個表格。我們不能再進一步。對於像我們這樣的大二學生來說,這是完全混亂的。任何幫助將被apprecaited

int main() { 
    srand((unsigned)time(NULL)); 
    int      // we lost on what we should put in our main 

經過你們的幫助下面是我的代碼,但它仍然不編譯我在這裏錯過什麼?

#include "stdafx.h" 
#include <iostream> 
#include <vector> 

using namespace std; 

double seed(long state) { 
    g_state = state; 
} 

double rand(void) { 
    const long a = 48271; 
    const long b = 2147483647; 
    const long c = b/a; 
    const long r = b % a; 
    long t = a* (g_state % c) - r * (g_state/c); 
    if (t > 0) 
     g_state = t; 
    else 
     g_state = t + b; 
    return ((double)g_state/b); 
} 


int main() { 
    std::vector<double> results; 
    for (int i = 1; i <= 10000; ++i) { 
     double number = rand(); 
    if (i <= 10 || i >= 9991) 
     results.push_back(number); 
} 
+0

回到你的教授,告訴他他的挑戰是沒有意義的。 – 2014-10-03 07:19:57

+0

你在「FNC」和「FNG」中喋喋不休,沒有說你認爲他們是什麼...對我來說並不意味着什麼。也許檢查你的講義或教科書......?無論如何,如果你的「rand」函數碰巧是「FNC」函數,那麼你要求的只是std :: vector 結果; for(int i = 1; i <= 10000; ++ i){double sample = rand(); if(i <= 10 or i > = 9991)results.push_back(sample); }。 (一個矢量實際上是一個表格)。 – 2014-10-03 07:33:33

+0

是FNC只是名稱:假設是「rand」函數。 [FNG是拼寫錯誤]感謝您的意見,現在開始對我有意義 – 2014-10-03 08:26:38

回答

1

state是你的種子在這裏。你用1初始化它。在10000次調用後它將是399268537。他給了你這個價值來檢查你的實現。

int main() 
{ 
    for(int i = 0; i < 10000; ++i) 
    { 
     rand(); 
    } 
} 

如果調用rand()這一下之後,再次和你步入功能和檢查state的價值,你會看到它的399268537.

您的代碼可以重構我作爲,使其看起來更像srand()rand()

double seed(long state) 
{ 
    g_state = state; 
} 

double rand(void) 
{ 
    const long a = 48271;    
    const long b = 2147483647;  
    const long c = b/a;   
    const long r = b % a;   
    long t = a* (g_state % c) - r * (g_state/c); 
    if(t > 0) 
     g_state = t; 
    else 
     g_state = t + b; 
    return ((double)g_state/b); 
} 

int main() 
{ 
    seed(1); 
    for(int i = 0; i < 10000; ++i) 
    { 
     rand(); 
    } 
} 
+0

你真的對我的困惑輕描淡寫。像你這樣的人讓學習變得有趣。我試圖重新修復這個問題,看看我想出了什麼。謝謝你V.很多,將返回投票答案 – 2014-10-03 08:29:14

+0

下面是我的代碼仍然沒有編譯 #include #include using namespace std; 雙種子(長狀態) { \t S_state = state; } double rand(void) { \t const long a = 48271; \t const long b = 2147483647; \t const long c = b/a; \t const long r = b%a; \t long t = a *(S_state%c) - r *(S_state/c); (t> 0) \t if(t> 0) \t \t S_state = t; \t else \t \t S_state = t + b; \t return((double)S_state/b); } int main() { \t std :: vector results; (int i = 1,i <= 10000; ++ i) \t {double sample = rand(); \t if(i <= 10 || i > = 9991)results.push_back(sample); \t} – 2014-10-03 09:12:04