본문

[C언어] 동전 던지기 시뮬레이션 예제(랜덤함수, 난수, 함수)

[C언어] 동전 던지기 시뮬레이션 예제(랜덤함수, 난수, 함수)


문제


"동전 던지기"를 시뮬레이트하는 프로그램을 작성한다. 프로그램이 동전을 100번 던지고 동전의 각면이 나타나는 횟수를 세어 출력한다. 

난수를 발생하여서 0 또는 1을 반환하는 flip() 함수를 작성하여 사용하라.

프로그램이 "동전 던지기"를 올바르게 시뮬레이트하는 경우, 동전의 각 면이 대략 절반정도 나타난다.


함수를 사용하고 함수 안에서 랜덤 함수를 사용하는 예제 이다.


소스
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
35
36
37
38
39
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
 
// 함수를 선언한다.
int flip();
 
int main()
{
    int back = 0;
    int forward = 0;
 
    // 동일한 난수가 나오지 않도록 초기화 한다.
    srand(time(NULL));
 
    // 100번 반복하여 앞면, 뒷면이 몇회 나오는지 확인하는 반복문
    for(int i = 0; i < 100; i++)
    {
        // 난수가 1이면 앞면, 0이면 뒷면을 증가
        if(flip())
        {
            forward++;
        }
        else
        {
            back++;
        }
    }
 
    printf("앞면은 %d번 나왔으며 뒷면은 %d번 나왔습니다.\n", forward, back);
    return 0;
}
 
//0 또는 1 이 랜덤하게 나오는 함수.
int flip()
{
    // 0 또는 1이 나오는 난수 함수
    return rand() % 2;
}
cs


요약

생각보다 간단한 문제이다.

여기서 가장 중요한 포인트는 

14번째 줄이다. 이것을 삭제하고 돌려보면 매번 같은 횟수가 출력된다.

그 이유는 랜덤값을 계속 같은 값에서 가져오기 때문이다.

반드시 초기화 해주어야 매번 다른 횟수가 나온다.


더욱 자세한 이유는 srand를 찾아보길 바란다.


rand함수는 값을 나눈 나머지 값 중에 하나가 나온다.

위에는 2로 나눴기 대문에 나올수 있는 나머지의 값은 0 또는 1이다.

만약에 1~10중에 랜덤하게 수를 발생하기 위해선


return rand() % 10 + 1;


위와 같이 해주면 10으로 나눈 나머지는 0 ~ 9 이지만 여기에 1을 더해 

1 ~ 10 중에 랜덤하게 수를 나타낼 수 있는 것이다.




댓글