개요
난수 (랜덤한 값)에 대한 내용 및 실습 예제
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 |