1 / 8

난수 (random number) / 노트

난수 (random number) / 노트. 함수 int rand(void) 호출할 때 마다 0~32767(RAND_MAX) 사이의 난수를 한 개 리턴하는 함수 #include < stdlib.h > 가 필요 호출 : rand() 난수의 필요성 주사위를 던졌을 때 나오는 값은 ? 가위바위보 게임에서 컴퓨터가 낼 것은 ? 시뮬레이션에서 사람마다 대기열에서 기다릴 수 있는 시간은 ?. 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000

ingrid
Download Presentation

난수 (random number) / 노트

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 난수(random number) / 노트 • 함수 int rand(void) • 호출할 때 마다 0~32767(RAND_MAX) 사이의 난수를 한 개 리턴하는 함수 • #include <stdlib.h>가 필요 • 호출 : rand() • 난수의 필요성 • 주사위를 던졌을 때 나오는 값은? • 가위바위보 게임에서 컴퓨터가 낼 것은? • 시뮬레이션에서 사람마다 대기열에서 기다릴 수 있는 시간은? 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000 4 번째 난수 : 32767 : 10 번째 난수 : 78 • for (i=1; i<=10 ; i++) • printf(“ %2d 번째 난수 : %d \n”, i, rand());

  2. 난수(random number) / 노트 • RAND_MAX rand()가 발생시키는 최대 난수값에 해당하는 상수 즉 32767 • 스케일링(scaling) • 사용자가 원하는 범위의 난수를 얻도록 조정하기 • 0, 1, 2 중 하나의 난수를 얻고 싶다면 rand() % 3 • 1, 2, 3 중 하나의 난수를 얻고 싶다면rand() % 3 + 1 • 10~20 중 하나의 난수를 얻고 싶다면rand() % 11 + 10 • 0 ~ end 사이의 실수형 난수 rand() * end / RAND_MAX;

  3. 난수(random number) / 노트 • 컴퓨터와 가위, 바위, 보 게임을 하고 싶다면? • 게임에서 사람이 낼 것 • 가위/바위/보 중 하나이며 입력을 통해 결정할 수 있다. • 컴퓨터가 낼 것 • 프로그램에서 가위/바위/보 중 하나를 결정해줘야 한다. • 가장 단순하게는 난수를 이용하여 셋 중 아무거나 한 개로 • computer = rand() % 3 + 1; // 1, 2, 3 중 임의의 값 좀 더 재밌게 실제 게임과 비슷하게 하려면 이전 게임에서 사람이 낸 것과 게임 결과를 토대로 이길 수 있는 것으로 결정하도록 인공지능? 기능을 추가한다. 컴퓨터와 가위바위보 게임을!!! 무엇을 내겠습니까> 1.가위 2.바위 3.보 ? _ scanf(“%d”, &man)

  4. 난수(random number) / 노트 • 가위, 바위, 보에 해당하는 1, 2, 3을 매크로 상수로 정의하면 프로그램 작성이 훨씬 쉬워진다. • #define GAWI 1 • #define BAWI 2 • #define BO 3 • : • scanf(“%d”, &man); • computer = rand() % 3 + 1; • if (man==BAWI && computer==GAWI) • printf(“축하! 당신이 이겼습니다!”); • :

  5. 난수(random number) • 함수 void srand(unsigned seed); • 난수 발생기의 seed 값을 설정해주는 함수 • seed값이 같다면 프로그램을 새로 실행해도 같은 순서의 난수들이 발생  앞의 1번 슬라이드 프로그램을 실행하면 실행할 때마다 같은 순서의 난수가 발생하는 것을 확인할 수 있다.  가위바위보 게임과 같은 경우 여러 번 게임을 하다 보면 컴퓨터가 내는 값을 알 수 있게 된다.(언제나 똑 같은 것을 내므로) 첫 번째 실행 결과 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000 4 번째 난수 : 32767 : 10 번째 난수 : 78 두 번째 실행 결과 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000 4 번째 난수 : 32767 : 10 번째 난수 : 78 • for (i=1; i<=10 ; i++) • printf(“ %2d 번째 난수 : %d \n”, i, rand()); 언제나 같은 순서의 난수가 발생함

  6. 난수(random number) • 프로그램이 실행될 때마다 새로운 일련의 난수들을 발생시키기 난수 발생기에서 난수를 얻기 전에 난수 발생기의 씨드를 지정해주되 프로그램이 새로 실행될 때마다 다른 씨드값이 지정되도록 해야 한다. • how? 현재 시간을 seed로 지정함 • 현재 시간은? time(NULL)로 구함, #include <time.h> 가 필요 • 현재 시간을 씨드로 지정하기는?srand(time(NULL)); 프로그램이 실행될 때마다 시간은 바뀌므로 이 함수가 실행될 때마다 다른 씨드가 만들어진다. 앞의 실행과는 다른 난수들을 얻음

  7. 난수(random number) / 노트 프로그램을 실행할 때 마다 이 함수가 실행되는 시간이 바뀌므로 씨드가 달라지고 이후로 rand()에서 얻는 난수들이 이전 실행 때와 다르다. • srand( time(NULL)); // 현재 시간을 seed로 설정 • for (i=1; i<=10 ; i++) • printf(“%2d째 난수 : \n”, i, rand()); 첫 번째 실행결과 1째 난수: 3000 2째 난수:1 3째 난수:15000 : 10째 난수:78 두 번째 실행결과 1째 난수:250 2째 난수:300 3째 난수:4 : 10째 난수:32000 세 번째 실행결과 1째 난수:45 2째 난수:12000 3째 난수:20000 : 10째 난수:799 주) 위의 프로그램에서 srand(time(NULL))을 제거하고 프로그램을 세 번 실행하면 세 번 다 똑 같은 순서의 난수가 발생한다.(∵씨드가 똑 같으므로)

  8. x (0, 0) 모니터 y  (x, y) (79,23) 커서를 화면의 원하는 위치로 이동하기/ 노트 • gotoxy( x, y); =>커서를 (x, y) 좌표 지점으로 이동 #include <windows.h> void gotoxy(int x, int y); void main( ) { gotoxy(20, 10); printf( “* 20, 10“); gotoxy(60, 20) ; printf(“* 60, 20”); } void gotoxy(int x, int y) { COORD Cur; Cur.X=x; Cur.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur); }

More Related