개요

난수 (랜덤한 값)에 대한 내용 및 실습 예제

 

 


1. 난수

의사 난수 : 난수는 아니나 난수로 취급이 가능한 수열을 지칭한다.

rand()은 내부적으로 배치된 수열에서 뽑아오는 형식이다.
srand() 사용하지 않으면 1번째에 세팅되어 있는 수열값을 가져오기 때문에 항상 같은 값이 나오는 것을 볼 수 있다.
srand()를 사용하면 내부적으로 수열의 배치를 변경하기 때문에 time함수를 사용하여 시드를 매 시간마다 변경시킴으로서 랜덤한 값을 얻을 수 있다.

rand() : 0~32767 사이의 랜덤한 값을 반환된다.

 

* rand()는 함수 내부의 seed값으로 인하여 반환되는 값이 정해진다.
  seed값을 설정하지 않을 경우 1로 세팅되어 있어 랜덤한 값을 얻지 못한다.

* rand()는 0~32767의 범위로 short 범위(-32768 ~ 32767)에 해당하여 short 값일 줄 알았지만

  int 값으로 반환하고 있다... 왜지??

 

srand() : 실행되는 rand()의 시드값을 설정한다.

srand(time(NULL)) : 프로그램이 실행된 현재 시간을 시드로 랜덤한 값을 가져온다.

* 현재 시간을 받아오기 때문에 완전한 랜덤은 아님

 

2. 실습 예제

실습 1)

3~7 사이의 랜덤한 숫자를 출력하는 프로그램을 작성하자. (3,7포함)

srand(time(NULL)); // 현재 시간을 시드로 랜덤한 값을 가져온다.

cout << "답 : " << rand() % 5 + 3 << endl;

랜덤한 값을 범위의 숫자 개수만큼 나누고 최소값을 더해주는 것으로 범위의 랜덤한 값을 얻을 수 있다.
랜덤한 숫자 출력하기 : (랜덤한 숫자) % (범위의 숫자 개수) + 최소값

 * 추가 설명
원하는 값 : 3, 4, 5, 6, 7 = (3+0), (3+1), (3+2), (3+3), (3+4) = 3 + (0, 1, 2, 3, 4)
0~4는 5로 나눈 나머지 값으로 찾을 수 있다.
→ rand() % 5 + 3

 

실습 2)

가장 작은 값과 큰 값을 입력 받아서 그 사이의 임의의 값을 출력하는 프로그램을 작성하자.

srand(time(NULL));

int value1; // 첫번째 값
int value2; // 두번째 값

cout << "첫번째 값을 입력해 주세요 : ";
cin >> value1;
cout << "두번째 값을 입력해 주세요 : ";
cin >> value2;

(value2 <= value1) ? // 첫번째 값이 클 경우와 작을 경우의 계산을 다르게 진행
    cout << "답 : " << rand() % (value1 - value2 + 1) + value2 << endl :
    cout << "답 : " << rand() % (value2 - value1 + 1) + value1 << endl;

 

실습 3)

프로그램을 실행하면 내부적으로 1~9 사이의 숫자가 정답으로 정해진다.
유저가 1~9 사이의 숫자를 입력하면 맞으면 true(정답입니다!), 틀리면 false(틀렸습니다.)를 출력한다.

srand(time(NULL));

int correctAnswer = rand() % 9 + 1; // 1~9 사이의 랜덤한 숫자를 correctAnswer에 넣어준다.

//입력
int yourAnswer;
cout << "1~9 사이의 값을 입력해 주세요 : ";
cin >> yourAnswer;

//출력
(1 <= yourAnswer && yourAnswer <= 9) ? // 정확한 수를 입력 했는가?
    ((correctAnswer == yourAnswer) ?   // 선택한 값이 랜덤한 숫자와 같은가?
        cout << "정답입니다!!" << endl : 
        cout << "틀렸습니다. 답은 " << correctAnswer << "입니다." << endl) : 
    cout << "범위를 벗어난 수를 입력하였습니다." << endl;
728x90

'Program > C (C++,C#)' 카테고리의 다른 글

[C++] 구구단 & 별찍기  (0) 2022.04.12
[C++] 제어문  (0) 2022.04.12
[C++] 연산자  (0) 2022.04.07
[C++] 변수  (0) 2022.04.06
[C++] 입력과 출력  (0) 2022.04.06

+ Recent posts