랜덤 수를 발생시키는 Random 클래스를 만들자. Random 클래스를 이용하여 랜덤한 정수를 10개 출력하는 사례는 다음과 같다. Random 클래스가 생성자, next(), nextInRange() 3개의 멤버 함수를 가지도록 작성하고 main() 함수와 합쳐 하나의 cpp파일에 구현하라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <iostream> #include <cstdlib> #include <ctime> using namespace std; class Random { public: Random() { srand((unsigned)time(0)); //다른 랜덤수를 발생시키기 위한 seed 설정 } int next() { return rand(); } int nextInRange(int a,int b) { return ((rand() % (b - a + 1)) + a); //a이상 b미만 랜덤 정수를 뽑는 알고리즘 } }; int main(void) { Random r; int i; cout << "-- 0에서 " << RAND_MAX << "까지의 랜덤 정수 10개--" << endl; //RAND_MAX=32767 상수 for (i = 0; i < 10; i++) { cout << r.next() << " "; } cout << "\n\n"; cout << "-- 2에서 " << "4까지의 랜덤 정수 10개--" << endl; for (i = 0; i < 10; i++) { cout << r.nextInRange(2,4) << " "; } cout << endl; return 0; } | cs |
5미만의 수를 rand 출력하려면 4의 나머지를 출력하면 된다. (0~3)
여기서 3~6을 출력하고싶으면 위의 값에 3을 더해주면 된다. 그런데 우리가 가진 인자는 3,6이기 때문에
4를 3,6으로 표현해야 한다. 0~4 = 4개 3~6= 4개 숫자이다. 즉 우리가 원하는건 3~6에 존재하는 숫자 개수이기 때문에
6-3+1을 해주면 된다.
3미만의 수를 rand 출력하려면 3의 나머지를 출력하면 된다. (0~2)
여기서 2~4를 출력하고 싶으면 4-2+1을 통해 나눠주는 수를 구하고 결과 값에 2를 더해주면 된다.
즉 일반적으로 표현했을 때 a~b 사이 랜덤 정수를 출력하고 싶으면
rand%(b-a+1)+a 를 해주면 되는 것이다.
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
EvenRandom 클래스 (0) | 2017.10.12 |
---|---|
Oval (사각형에 내접하는 타원) 클래스 (0) | 2017.09.21 |
별 출력 (0) | 2017.09.09 |
1부터 10까지 더하기 (0) | 2017.09.09 |
개인정보 출력 (0) | 2017.09.09 |