난수 생성
rand(); = 0~32767사이의 랜덤한 값을 반환한다.
예시)
cout << rand() << endl;
결과)
여러번 시도를 해도 결과값은 41에서 바뀌지 않는다.
결과를 바꾸는 위해선?
난수는 함수의 내부에 있는 seed값에 의해 리턴값이 바뀌게 된다.
하지만, 아무런 설정도 안 했을 경우 기본 시드 값이 1로 세팅되어 있어 41이라는 결과 밖에 나오지 않는다.
그렇기에 seed값을 랜덤으로 바꾸는 방법이 필요하다.
srand(time(NULL)); = 계속 바뀌는 시간을 기준으로 seed값을 변경한다.
예시)
srand(time(NULL));
cout << rand() << endl;
결과)
여러번 시도를 한 결과 결과값이 바뀌는 것을 볼 수 있다.
랜덤 값의 범위 지정 (최대값)
랜덤 값을 설정할 수 있게 되었으니 랜덤값의 범위를 정해보자.
rand()% A = A미만의 숫자중 하나를 반환한다.
예시) 10 미만의 숫자를 반환하게 하는 프로그램
srand(time(NULL));
cout << rand() % 11 << endl;
왜?
rand()로 나오는 숫자에서 11(A)로 나머지를 구하게되면
rand()로 어떤 숫자가 나오든 나머지로 10이상의 숫자가 나올 수 없기에 0 ~ 10사이의 숫자가 출력된다.
랜덤 값의 범위 지정 (최소값)
랜덤 값의 최대치를 설정할수 있게 되었으니 이번엔 최소 값을 설정해보자.
rand()% A + B = 최대 값(A - B + 1) ~ 최소값(B) 사이의 숫자 중 하나를 반환한다.
예시) 3에서 7 사이의 랜덤한 숫자를 출력하는 프로그램
srand(time(NULL));
cout << rand() % 5 + 3 << endl;
왜?
나머지로 나온 숫자 A에서 +B 를 해주면 어떤 결과가 나와도 B이상의 숫자가 나오게 되기에 최소값이 된다.
ex) A =랜덤, B = 3 -> A + 3= 최소 3이상의 숫자.
그렇기에 최대 값은 (A - B + 1) , 최소 값은 B가 되는 것이다.
실습
실습 1. 3 ~ 7사이의 랜덤한 숫자를 출력하는 프로그램을 작성하자.
실습 2. 가장 작은 값과 큰 값을 입력 받아서 그 사이의 임의의 값을 출력하는 프로그램을 작성
실습 3. 프로그램을 실행하면 내부적으로 1~10 사이의 숫자가 정답으로 정해진다.
1~10 사이의 숫자를 입력하면 맞으면 True 틀리면 False를 출력한다.
int main()
{
srand(time(NULL));
//실습 1
cout << rand()% 5 + 3 << endl;
//실습 2
int SNum;
int PNum;
cout << "최소 수 입력 : ";cin >> SNum;
cout << "최대 수 입력 : ";cin >> PNum;
cout << rand() % (PNum - SNum - 1) + SNum << endl;
//실습 3
int Ran;
int RanIn;
Ran = rand()% 9 + 1;
cout << "정답입력" << endl;
cin >> RanIn;
cout << Ran << endl;
(Ran == RanIn) ? cout << "정답" << endl : cout << "오답" << endl;
}
'코딩 > C++' 카테고리의 다른 글
[C++] 배열 (0) | 2022.04.13 |
---|---|
[C++] 제어문 (0) | 2022.04.12 |
[C++]연산자 (0) | 2022.04.07 |
[C++]변수명 이름 규칙 (0) | 2022.04.07 |
[C++]컴퓨터 정의, 데이터 타입 정리 (0) | 2022.04.07 |