본문 바로가기
c++

8. 난수생성,#include <cstdlib>,#include <ctime>,rand(),srand()

by 래끼 2019. 12. 30.
728x90
반응형

전에 배웠던 cin같이 우리가 입력하는 값과 달리 컴퓨터가 임의로 숫자를 우리에게 주는 방법은 없을까요?

 

바로바로 cstdlib 헤더파일에 있는 rand()라는 함수를 이용해서 우리가 예측할 수 없는 난수를 컴퓨터가 생성하게 하는 방법이 있습니다!!

 

컴퓨터가 설정해준 난수로 뺄셈 계산을 해보는 프로그램을 만들고 설명해 드리도록 할게요~

아래는 두개의 난수 설정 후 뺄셈 계산을 하는 코드입니다.

난수생성을 위해서는 #include <cstdlib> 헤더를 추가해야합니다.

이 헤더를 추가하면 rand() 함수를 사용할 수 있는데요! 

rand()함수는 0~RAND_MAX 사이의 난수를 생성하여 반환합니다. (**visual C++에서 RAND_MAX는 32767 입니다.)

즉, 0~32767 중 무작위로 한 수를 반환한다는 뜻입니다.

 

그런데 위의 프로그램에서 rand() 함수뿐만 아니라 srand()와 time(0) 도 사용된 걸 알 수 있는데요!!!

 

 

rand()함수는 매번 같은 시스템을 실행시킵니다. ( 이걸 '의사난수'라고 하는데 그냥 참고하세용 : ) )

rand()함수 만으로 프로그램을 만들면 출력할 때마다 같은 순서의 수만 발생되는걸 확인할 수 있습니다.

이렇게 간단한 코드를 입력한 후 출력해보면

 

 

몇번을 출력해도 같은 순서의 같은 수가 적혀있는 결과만 발생합니다.

 

출력할 때마다 다른 난수를 얻기위해 srand() time(0)를 사용하는데요.

 

다시 뺄셈 코드로 돌아와서

프로그램을 실행할때마다 다른열의 난수를 얻기위해 

9번째 줄의 srand(time(0)) 코드가 필요합니다.

time(0)#include<ctime>헤더에 정의되어 있습니다.

먼저 srand( ) 함수는 괄호안에 넣는 수로 초기값을 변경하는 역할을 해줍니다.

time(0)는 1970년 1월1일 이후 현재 시각까지의 시간을 초로 반환해줍니다. 쉽게 말하면 시간은 계속 흐르니까 출력할때 마다 초로 반환된 값은 항상 다르겠죠? 즉 출력할 때마다 반환되는 값이 달라지는 특징이 있습니다.

 

rand()함수만 이용했을때 계속 같은 열의 난수가 발생하는 이유는 초기값이 '1'로 설정되어있기 때문인데요.

초기값이 매 출력 마다 다르다면 다른 열의 난수가 출력되겠죠.

srand(time(0))라는 코드는 초기값을 time(0)로 설정해주어 출력할때마다 다른 열의 난수가 생성될 수 있게 해줍니다.

 

그 이후의 코드들은 어렵지 않아요!

12번째 줄과 13번째 줄의 rand()%100으로 0~99사이의 임의의 정수를 만듭니다.

17번째줄부터 if-else문을 이용하여 상황에 맞게 뺄셈을 해주고 결과를 출력합니다.

 

이렇게 난수를 생성해주는 코드들에 대해 알아보았는데요, 잘 알아두면 여러 프로그램에서 유용하게 쓰입니다 : )

728x90
반응형

댓글