<난수란?>
랜덤한 수 : 게임에서 다양한 순간에 난수를 받아 활용해야한다.
<rand 함수>
rand 함수는 특정 시드값에서 난수를 받아온다. 참고하는 씨드표가 따로 있다.
즉, rand(1) 은 계속 41만 출력된다.
아래와 같이 랜드함수는 결과로 정수 int형을 반환한다.
전달인자가 아무거도 없는 함수인다. ( rand(void) )
0 ~ 32367 (2바이트의 최대 표현범위) 중 하나의 숫자가 반환된다.
rand함수는 사용횟수마다 다른값이 나오는데, 다시 실행하면 같은 값을 반환한다.
int iRand = rand(); |
<sland 함수> ****for문 안에서 돌릴 필요없다. 전역변수로 한번만 선언해줘도 시간은 돌아가기 때문이다.****
rand함수에서의 시드값을 바꿔주기 위해 sland 함수가 사용된다.
리턴타입은 없고 전달인자로 정수형 씨드를 준다.
랜덤 함수인(srand)을 사용하려면 c++에서 <cstdlib>를 헤더를 포함시켜야 합니다
rand함수는 sland 함수에 의존적이다.
양의 정수만 seed로 사용할 수 있습니다.
이 함수를 호출하지 않고 rand함수를 호출하면 srand(1)을 호출하고 rand함수를 호출한 결과랑 같다.
**sland 함수는 인수값은 있고, 반환값은 없는 함수이다.**
void srand(unsigned int seed); |
시드값은 어느정도 일정하기 때문에 srand에 시드 값을 넣어 항상 바꿔줘야한다.
일정한 시드값을 넣어주면 또 일정한 값이 아래와 같이 출력된다.
srand(1); int iRand = rand(); |
41 |
srand(2); int iRand = rand(); |
45 |
srand(3); int iRand = rand(); |
48 |
srand(4); int iRand = rand(); |
51 |
따라서 time함수를 사용해서 현재 시간에 따라 운영체제가 계속 랜덤한 시간 값을 넣는다.
#include <time.h> 시간 함수를 사용 하려면 시간 값이 정의 되어있는 헤더파일을 include해야 한다.
srand(unsigned(time(NULL))); int iRand1 = rand(); |
컴퓨터의 연산은 빠르기때문에
위와 같은 식을 여러번 복사 붙여넣기 해도 같은 시드값을 넣어준 것으로 인식하고 같은 랜덤값을 처음부터 출력한다.
<time 함수는 1970년 1월1일 부터 흐르는 시간의 값을 넣어준다.>
'프로그래밍 > C++' 카테고리의 다른 글
[C++]오버로딩 (0) | 2021.09.15 |
---|---|
[C++]함수범위, 지역변수, 정적변수(static), 전역변수 (0) | 2021.09.15 |
for문(반복문), size_t (0) | 2021.09.10 |
while (반복문) (0) | 2021.09.10 |
분기문 (if, switch, goto, while) (0) | 2021.09.10 |