Skip to content

Latest commit

 

History

History
141 lines (98 loc) · 2.9 KB

06.random.md

File metadata and controls

141 lines (98 loc) · 2.9 KB

난수

난수를 만들어봅니다.

난수 SEED

rand함수는 시드(seed)라는 값에의해 생성되므로, srand()를 이용하여 시드값을 설정해주어야 합니다.

아래 코드에서는 시간을 seed로 이용했습니다.

#include<iostream>
#include<time.h>

using namespace std;

int main() {
    srand((unsigned int)time(0));
    return 0;
}

난수 생성하기

0에서 100까지의 난수를 생성했습니다.

% 100만 하게된다면 0-99까지만 나옵니다.

#include<iostream>
#include<time.h>

using namespace std;

int main() {
    srand((unsigned int)time(0));
    cout << "random : " << (rand() % 100 + 1) << endl;
    return 0;
}
  • rand 함수를 쓰려면 <stdlib.h> 헤더가 있어야 합니다. (이 예제 코드는 비주얼 스튜디오에서 작업하여 해당 헤더가 참조되지 않았습니다. 참고부탁드립니다.)

난수로 확률 지정하기

생성된 난수로 확률도 지정할 수 있습니다.

10000까지 나오게한 뒤, 100.00으로 나오게 합니다.

#include<iostream>
#include<time.h>

using namespace std;

int main() {
    srand((unsigned int)time(0));
    cout << "random : " << (rand() % 100 + 1) << endl;

    double percent;
    percent = rand() % 10000 / 100.f;
    cout << "random : " << percent << endl;

    if(percent <= 80.f)
        cout << "in 80%" << endl;
    if (percent <= 60.f)
        cout << "in 60%" << endl;
    if (percent <= 40.f)
        cout << "in 40%" << endl;
    if (percent <= 20.f)
        cout << "in 20%" << endl;
    if (percent <= 1.f)
        cout << "in 1%" << endl;
    return 0;
}

C++14에 추가된 난수 생성

  • random_device : 하드웨어 시드
  • uniform_int_distribution : 정수
  • uniform_real_distribution : 실수
  • mt19937_64 : 난수 엔진

rand보다 명확한 난수를 추출해내기 위해 사용합니다.

#include <iostream>
#include <random>
using namespace std;

void main(void)
{
    int min = 0;
    int max = 10;
    random_device r;
    mt19937_64 rnd(r());

    uniform_int_distribution<int> range(min, max); // std::uniform_real_distribution

    cout << range(rnd) << endl;
}

과제

  • 과제-1 : 기상예측 프로그램 만들기 (비: 30%, 눈:10%)

예제 코드:

#include<iostream>
// time.h를 가져오는 코드를 작성합니다.

using namespace std;

int main() {
    srand((unsigned int)time(0));

    //(연습 코드)
    cout << "random : " << (rand() % 100 + 1) << endl;

    double percent;
    //percent = ???;
    //확률을 xx.xx 형식으로 출력되도록 작성합니다.

    float rain_percent = 0;

    // 이곳에서 주어진 날씨 확률에 따른 현재 비 예측을 작성합니다.

    float snow_percent = 0;

    // 이곳에서 주어진 날씨 확률에 따른 현재 눈 예측을 작성합니다.

    cout << rain_percent << endl;
    cout << snow_percent << endl;

    return 0;
}