본문으로 이동

미디어위키 1.45 안정화가 거의 끝났습니다. 다만 Flow 확장 기능 관련 이슈가 있어서 대체하는 작업을 수행할 계획입니다.

  1. 큰숲백과:청사진에서 위키 발전의 대략적인 방향성을 제시했습니다. 의견이 있으신 분은 큰숲백과토론:청사진에서 의견을 남겨주시면 좋겠습니다.
  2. 기능상의 오류로 지원하지 않고 있는 기능에 대해서는 큰숲백과토론:이슈 트래커에 요약했습니다. 참고하시기 바랍니다.
  3. 데이터베이스 덤프 받고싶으신 분은 큰숲백과 가입 후에 사용자토론:Bigforest에 의견 남겨주시면 ftp 주소, 계정, 비밀번호를 특수:EmailUser를 통해서 공개할 예정입니다.

작은숲:위키노트/초보자를 위한 C 언어 강의/임의의 수 만들기

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
Utolee90 (토론 | 기여)님의 2016년 11월 10일 (목) 02:28 판 (판 1개를 가져왔습니다: 위키노트(http://wiki.mooo.org/)에서 가져옴)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

컴퓨터가 정말로 랜덤한 수를 만든다는 것은 그렇게 쉬운 일은 아니다. 그래서 의사 랜덤(pseudo-random)을 만들어낸다. 의사 랜덤이란 정말 랜덤은 아니지만, 그래도 랜덤한 수를 말한다. C 언어에서는 랜덤한 수를 만들기 위해 rand() 함수를 사용한다. 이 rand() 함수는 stdlib.h에 선언되어 있다. rand() 함수는 0에서부터 stdlib.h에 정의되어 있는 RAND_MAX 사이의 수를 되돌려준다. 그리고 rand() 함수를 사용하기 위해서 먼저 해줘야 할 일이 있다. 그건 랜덤 시드(random seed) 값을 주는 것이다. 랜덤 시드는 랜덤한 수를 만들기 위한 씨앗(근본)이 된다. 이 랜덤 시드를 이용해서 의사 랜덤한 수를 그래도 최대한 랜덤한 수가 될 수 있도록 해준다. C 언어에서는 이 랜덤 시드 값을 설정하기 위해 srand() 함수를 제공한다. srand() 함수도 stdlib.h에 선언되어 있다. rand() 함수와 srand() 함수의 원형은 아래와 같다.

int rand( void );
void srand( unsigned int seed );

일반적으로 랜덤 시드 값을 설정하기 위해 우리는 '현재 시각'을 사용한다. 현재 시각은 언제나 유일한 값이다. 따라서 rand() 함수로 만드는 랜덤한 값이 정말 랜덤할 수 있도록 해준다.

#include 
#include 
#include 
void main( void )
{    int i;
    srand((unsigned) time(NULL));
    ...
    i = rand();
    ...
}

위와 같이 srand() 함수의 매개 변수로 현재 시각을 넘겨서 rand() 함수가 반환하는 값이 가능한 랜덤한 값이 되도록 한다. srand() 함수는 프로그램 내에서 한번만 호출하면 된다. 처음 rand() 함수가 호출되면, srand() 함수에 의해 설정된 시드 값을 이용해 랜덤한 수를 만들어내고, 다음부터는 이전에 만든 랜덤 값을 시드로 사용한다. 그렇다면 1에서 10 사이의 랜덤한 수를 만들기 위해서는 어떻게 하면 될까? 나머지 연산자를 이용하면 된다. 아래의 예를 보도록 하자.

#include 
#include 
#include 
void main( void )
{    int i, num;
    srand((unsigned) time(NULL));
    for (i = 0; i < 10; i++) {
        num = (rand() % 10) + 1;
        printf("%d", num);
    }
}

위 예에서 변수 num은 1에서 10 사이의 임의의 수를 가지게 된다. 왜 그럴까? 여기에서 time() 함수는 1970년 1월 1일 0시에서부터 몇 초가 지났는지 알려주는 함수이다. 이건 항상 유일한 값이다. 이처럼 C 언어에서 임의의 수를 만드는 것은 쉽다. 처음에 srand() 함수를 한번 호출해주고, 다음에는 rand() 함수를 사용하면 된다. 만약 1에서 100 사이의 수가 필요하다면 아래와 같이 해주면 된다.

int num;
srand((unsigned) time(NULL));
num = (rand() % 100) + 1;

임의의 수를 만드는 방법은 다른 프로그래밍 언어에서도 대부분 비슷하다. 더 편한 방법을 제공하는 프로그래밍 언어들도 있다. PHP처럼 rand() 함수의 매개 변수로 만들 임의의 수의 최소값과 최대값을 넘겨줘서 나머지 연산을 하지 않아도 되도록 해주는 언어도 있다.