int rand(void); // stdlib.h에 prototype이 정의되어 있음.
#define RAND_MAX 32767 또는 #define RAND_MAX 2147483647
rand() <= RAND_MAX / 2 이면 head // rand() % 2 == 0 을 조건식으로 사용할 경우는?
else tail
#define HEAD 0
#define TAIL 1
int TossCoin(void)
{
if (rand() <= RAND_MAX / 2)
return HEAD;
else
return TAIL;
}
잘못된 예 1)
int RollDie(void)
{
if (rand() < RAND_MAX / 6) return 1;
else if (rand() >= RAND_MAX / 6 && rand() < RAND_MAX * 2 / 6) return 2;
else if (rand() >= RAND_MAX * 2 / 6 && rand() < RAND_MAX * 3 / 6) return 3;
else if (rand() >= RAND_MAX * 3 / 6 && rand() < RAND_MAX * 4 / 6) return 4;
else if (rand() >= RAND_MAX * 4 / 6 && rand() < RAND_MAX * 5 / 6) return 5;
else if (rand() >= RAND_MAX * 5 / 6 && rand() <= RAND_MAX) return 6;
}
잘못된 예 2)
int RollDie(void)
{
if (rand() < RAND_MAX / 6) return 1;
else if (rand() < RAND_MAX * 2 / 6) return 2;
else if (rand() < RAND_MAX * 3 / 6) return 3;
else if (rand() < RAND_MAX * 4 / 6) return 4;
else if (rand() < RAND_MAX * 5 / 6) return 5;
else return 6;
}
잘못된 예 3)
int RollDie(void)
{
int r;
r = rand();
if (r < RAND_MAX / 6) return 1;
else if (r < RAND_MAX * 2 / 6) return 2;
else if (r < RAND_MAX * 3 / 6) return 3;
else if (r < RAND_MAX * 4 / 6) return 4;
else if (r < RAND_MAX * 5 / 6) return 5;
else return 6;
}
예 4)
int RollDie(void)
{
int r;
r = rand();
if (r < RAND_MAX / 6) return 1;
else if (r < RAND_MAX / 6 * 2) return 2;
else if (r < RAND_MAX / 6 * 3) return 3;
else if (r < RAND_MAX / 6 * 4) return 4;
else if (r < RAND_MAX / 6 * 5) return 5;
else return 6;
}
int RandomInteger(int low, int high);
알고리즘)
Interface는
들을 포함하여야 한다.
Constant definitions는 보통 #define
문을 사용한다.
#include // compile 시 지정된 file 포함 #define // 하나의 symbol로 긴 문자열 대치
예)
#include "filename" #include <filename> #define symbol replacement text
예)
#define MAX (A, B) ((A) > (B) ? (A) : (B)) x = MAX(p+q, r+s); ==> x = ((p+q) > (r+s) ? (p+q) : (r+s)); 로 대치
잘못 사용 예)
MAX(i++, j++) #define square(x) x * x
#undef 에 의해 정의가 취소될 수 있다.
#ifndef SYMBOL ==> #if !define(SYMBOL) # define SYMBOL ... ... #endif #if SYSTEM==SYSV ... #elif SYSTEM== BSD ... #elif SYSTEM==WINDOWS ... #else ... #endif
void Randomize(void)
{
srand((int) time(NULL)); // time.h를 include하여야 함.
}
위의 random number interface design에 대한 다음 사항들을 고려해 볼 것.