1. 문제

 

3. 랜덤 수를 발생시키는 Random 클래스를 만들자. Random 클래스를 이용하여 랜덤한 정수를 10개 출력하는 사례는 다음과 같다. Random 클래스가 생성자, next(), nextInRange()의 3개의 멤버 함수를 가지도록 작성하고 main() 함수와 합쳐 하나의 cpp파일에 구현하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

class Random {
public :
	Random() { srand( (unsigned)time(0) ) ;}
	int next();
	int nextInRange(int a, int b);
};
int Random::next() {
	int n = rand();
	return n;
}
int Random::nextInRange(int a, int b) {
	int n;
	n = a + ( rand() % (b-a+1) );
	return n;
}

int main() {
	Random r;
	cout << "-- 0에서 " << RAND_MAX << "까지의 랜덤 정수 10 개--" << endl;
	for(int i=0; i<10; i++) {
		int n = r.next();
		cout << n << ' ';
	}
	cout << endl << endl << "-- 2에서 " << "4 까지의 랜덤 정수 10 개 --" << endl;
	for(int i=0; i<10; i++) {
		int n = r.nextInRange(2, 4);
		cout << n << ' ';
	}
	cout << endl;
}

 

4. 설명

 

생성자에서는 보통 변수들을 초기화 하는 기능을 합니다.

이 Random클래스 생성자에서는 srand( (unsigned)time(0) ); 을 실행하여서서 실행할 때마다 다른 랜덤 값을 가져오게 합니다.

 

rand()함수는 범위(0~32767) 사이의 수를 랜덤하게 return하는 함수 입니다.

 

특정 범위에 랜덤한 수를 가져오는 방법은

ex) 2부터 4 까지

1. 위에서 본 것처럼 rand()는 범위에 수 중 랜덤한 수를 return하는 함수입니다.

 

2. 그렇다면 rand() % 3 을 계산한다면, 그 결과는 0, 1, 2 이 중 하나가 나옵니다.

 

3. 이것만으로 0~2사이 랜덤한 수를 구할 수 있습니다.

 

4. 여기서 2~4인 랜덤한 수를 구하기 위해서는 +2를 해주면 끝입니다.

 

5. 이러한 방법으로 특정 범위에서 랜덤한 수를 구할 수 있습니다.

 

 

※ RAND_MAX : <cstdlib> 헤더 파일에 선언되어 있는 수로서 32767 입니다.

※ 범위 a~b의 랜덤한 수 구하는 공식 : a + ( rand() % (b-a+1) ); 많이 해보시면 꼭 이렇게 공식처럼 외우시지 않으셔도 하실 수 있을 겁니다.

 

+ Recent posts