2017-04-15 1 views
-4

대학 숙제를 위해 시뮬레이터를 만들어야합니다. 이 시뮬레이터에는 3 대의 컴퓨터가 있으며, 그 중 2 대의 컴퓨터는 컴퓨터 1로 메시지를 보내고 컴퓨터 1은 메시지를 보내거나 거부합니다. 거부는 컴퓨터 2에서 20 %의 거부와 컴퓨터 3에서 50 %의 임의의 확률입니다. 나는 rand() % 100 + 1 함수를 srand (시간 (NULL)) 시드와 함께 사용합니다. 그것은 임의의 숫자를 만들지 만, 여러번 실행해야하고 동일한 난수가 사용될 때마다 실행해야합니다. 예를 들어 시뮬레이션을 12 번 실행하고 생성 된 수가 45 일 경우 45 번이 12 번 사용됩니다. 난 둘 다 난수 생성기를 코드 안에 배치하고 바깥에서 함수를 만들었다. 매번 난수를 생성하는 난수 생성기를 어떻게 만들 수 있습니까?C++은 매번 난수를 생성합니다.

#include <iostream> 
#include <new> 
#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 

using namespace std; 

int randomgen() 
{ 
int rndnum=0; 
srand (time(NULL)); 
rndnum=rand()%100+1; 
cout<< rndnum<<endl; 
return rndnum; 
} 


struct comp1 
{ 

int rejected=0; 
int received=0; 
int sent=0; 
int onhold=0; 


bool comp2reception() 
{ 
    received++; 
    bool result=false; 
    int rndnum=0; 
    srand (time(NULL)); 
    rndnum=rand()%100+1; 

    if(rndnum<=20) 
    { 
     rejected++; 
     result=false; 
    } 
    if(rndnum>=21) 
    { 
     onhold++; 
     result=true; 
    } 
    return result; 
} 



bool comp3reception() 
{ 
    received++; 
    bool result=false; 
    int rndnum=randomgen; 

    if(rndnum<=50) 
    { 
     rejected++; 
     result=false; 
    } 
    if(rndnum>=51) 
    { 
     onhold++; 
     result=true; 
    } 
    return result; 
} 

}; 
+0

'srand'를 두 번 이상 사용하지 않아도됩니다. 실제로, 당신은 그것을 전혀 사용하지 않아야합니다. [이 예] (http://en.cppreference.com/w/cpp/numeric/random)를보십시오. – nwp

+1

당신은 srand를 주 함수에 한 번 넣어야합니다. 다른 곳이 아닙니다. – Meccano

+0

임의의 숫자를 물어볼 때마다 동일한 시드 값을 사용하여'srand'를 호출하면 동일한 수를 얻게됩니다. 'srand' 호출을'main' 함수의 맨 위로 이동하십시오.이 함수는 프로그램이 시작될 때 한 번만 호출됩니다. –

답변

0

프로그램 시작시 한 번만 srand(time(NULL))으로 전화하십시오.

time() 1970 년부터의 초수를 반환하고 프로그램을 완료하는 데 걸리는 시간이 거의 걸리지 않으므로 각 호출 전에 반드시 동일한 값으로 발전기를 재설정하십시오. 물론 각 호출이 동일한 (첫 번째) 값을 반환합니다.

3

C++ 11 헤더 <random>을 사용하십시오.

#include <random> 

static std::random_device rd; 
static std::mt19937 gen(rd()); 

int randomgen() 
{ 
    std::uniform_int_distribution<> dis(0,100); 
    int rndnum = dis(gen); 
    std::cout << rndnum << std::endl; 
    return rndnum; 
} 
관련 문제