90 likes | 318 Views
난수 (random number) / 노트. 함수 int rand(void) 호출할 때 마다 0~32767(RAND_MAX) 사이의 난수를 한 개 리턴하는 함수 #include < stdlib.h > 가 필요 호출 : rand() 난수의 필요성 주사위를 던졌을 때 나오는 값은 ? 가위바위보 게임에서 컴퓨터가 낼 것은 ? 시뮬레이션에서 사람마다 대기열에서 기다릴 수 있는 시간은 ?. 1 번째 난수 : 3000 2 번째 난수 : 1 3 번째 난수 : 15000
E N D
난수(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());
난수(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;
난수(random number) / 노트 • 컴퓨터와 가위, 바위, 보 게임을 하고 싶다면? • 게임에서 사람이 낼 것 • 가위/바위/보 중 하나이며 입력을 통해 결정할 수 있다. • 컴퓨터가 낼 것 • 프로그램에서 가위/바위/보 중 하나를 결정해줘야 한다. • 가장 단순하게는 난수를 이용하여 셋 중 아무거나 한 개로 • computer = rand() % 3 + 1; // 1, 2, 3 중 임의의 값 좀 더 재밌게 실제 게임과 비슷하게 하려면 이전 게임에서 사람이 낸 것과 게임 결과를 토대로 이길 수 있는 것으로 결정하도록 인공지능? 기능을 추가한다. 컴퓨터와 가위바위보 게임을!!! 무엇을 내겠습니까> 1.가위 2.바위 3.보 ? _ scanf(“%d”, &man)
난수(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(“축하! 당신이 이겼습니다!”); • :
난수(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()); 언제나 같은 순서의 난수가 발생함
난수(random number) • 프로그램이 실행될 때마다 새로운 일련의 난수들을 발생시키기 난수 발생기에서 난수를 얻기 전에 난수 발생기의 씨드를 지정해주되 프로그램이 새로 실행될 때마다 다른 씨드값이 지정되도록 해야 한다. • how? 현재 시간을 seed로 지정함 • 현재 시간은? time(NULL)로 구함, #include <time.h> 가 필요 • 현재 시간을 씨드로 지정하기는?srand(time(NULL)); 프로그램이 실행될 때마다 시간은 바뀌므로 이 함수가 실행될 때마다 다른 씨드가 만들어진다. 앞의 실행과는 다른 난수들을 얻음
난수(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))을 제거하고 프로그램을 세 번 실행하면 세 번 다 똑 같은 순서의 난수가 발생한다.(∵씨드가 똑 같으므로)
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); }