정체불명의 모모

c++ 문제 : 챕터1. 주사위 게임(어서와c++은 처음이지?) 본문

프로그래밍(c++)

c++ 문제 : 챕터1. 주사위 게임(어서와c++은 처음이지?)

정체불명의 모모 2019. 11. 26. 21:58
  • 2개의 주사위를 던져서 주사위의 합을 표시하는 프로그램을 작성해보자.
  • 주사위를 던지면 랜덤한 수가 나와야 한다.
  • 난수를 생성하는 코드 필요.

[ 다음과 같은 문장을 이용하여 1부터 ~ 6사이의 난수를 발생 시켜라 ]

#include <iostream>

#include <ctime>

#include <cstdlib>

 

using namespace std;

 

int main( )

{  

    srand(time(NULL));

    int number = (rand( ) %6 ) +1 ;

    return 0;

}

빨간색글은 모르는 것들 입니다. ㅡㅜ....

 

이제 알아 보도록 할게요~.

rand는 아마 랜덤숫자를 배출하란 뜻인것 같습니다.

 

1. #include<ctime>

   = 간단하게 말하면 c언어에서 시간 관련 함수를 모아놓은 라이브러리 이다. 즉, 헤더 이다.

       time_t 값을 문자열로 바꾼 것 이다.

  [ 참고 : https://modoocode.com/108 ]

 

 

C 언어 레퍼런스 - time.h 헤더파일

아직 C 언어와 친숙하지 않다면, 씹어먹는 C 언어 강좌를 보는 것이 어떻까요? 이는 C 언어에서 시간 관련 함수를 모아놓은 라이브러리이다.시간 관련 함수들 clock  :  시계 프로그램 difftime  :  두 개 시간의 차이를 구한다. mktime  :  tm 구조체를 time_t 로 바꾼다. time  :  현재 시간을 구한다.변환 관련 asctime  :  tm 구조체를 문자열로 바꾼다. ctime  :  time_t 값을 문자열로 바꾼다. g

modoocode.com

2. #include<cstdlib>


= (cstdlib.h == stdlib.h(c언어)) 와 같은 의미이다. 

    난수 함수를 포함하고 있다.

    rand( ) , srand( ) 함수들이 포함 되어 있다.

[ 참고 : https://mrw0119.tistory.com/57 ]

  rand( )는 정확히는 난수를 발생시키는 것이 아니라 

내부에 저장된 난수표에서 seed(씨드)값에 따라 난수를 뽑아오는 것 뿐이라고 합니다.

(씨드의 정확한 정의는 차차 배워나가도록 하겠습니다.)

 

 

 

3.srand(time(NULL));

제가 직접 난수를 srand(time(NULL)) 를 입력하지 않고 입력 해보았습니다.

이런식으로 프로그램??내에 저장되어 있는 난수들이 출력 되는 것 같습니다.

참고한 블로거에서도 같은 난수가 나열되어 있었습니다.

그런 상황을 없애고자 srand(time(NULL))을 입력하여 현재 시간(초 단위의 정수)을 얻어서 씨앗값으로

사용한 것입니다. (한번만 설정해주면 되고, 그 다음부터는  rand( ) 만 반복적으로 호출하면 난수를 계속 얻을 수 있습니다.)

 void srand(unsigned int seed)       // rand( ) 의 씨앗값(seed)의 설정

4. (rand( )% 6 ) + 1;

 =  rand( ) 가 반환하는 난수는 '0~RAND_MAX'의 범위에 속한 정수이며, RAND_MAX의 값은

   컴파일 마다 다를 수 있습니다.

   ( rand( ) 로 얻을 수 있는 최대값(10진수로 32767) )

 rand( ) % 값의 개수 + 시작값

 예를 들어 1~45범위의 난수를 얻으려면, 다음과 같이 된다.

 int num = rand( ) % 45 + 1 ;

 

-----------------------------------------------------------------------------------------------------------------------------------

 

 


 다 배웠으니 주사위 게임을 작성 해보자.

#include<iostream>

#include<ctime>

#include<cstlib>

 

using namespace std;

 

int main( )

{

     srand(time(NULL)) ;

     int dice1 = rand( ) % 6 +1 ;

     int dice2 = rand( ) % 6 +1 ;

    

     cout << "dice1의 주사위 숫자는 : " << dice1 << endl ;

     cout << "dice2의 주사위 숫자는 : " << dice2 << endl ;

     cout << " 두 주사위의 합은 : " << dice1 + dice2 << endl;

 

     return 0 ;

}

ㅎㅎ 이제 확실히 이해가 간다.

 

오늘 모르는 부분을 공부하려 구글링 해보니 , c++은 정말 c언어를 기반으로 되어 있다는 걸 깨달았다.

아직 c언어 책을 보지않아 잘몰랐지만, 알아보려 'c언어의 정석'이라는 책을 뒤져가며 헤더 와 함수의 정의를 찾았다.

매우 잼있고 흥미롭다. 

그물처럼 이어져 있어서 잼있는것 같다~ 찾는 재미도 쏠쏠하고~ 아직 초반이라 그럴지도 모르지만 ㅎㅎ 

 오늘은 일정이 있어 많이 못했지만 모르는걸 안것 만으로 큰 수확이다.ㅎㅎㅎ

 

Comments