乱数発生例2

乱数発生例2(list_14.c)
#include <stdio.h>
#include <math.h>

/* double型データをint型へ */
int rintv(double value)
{
  if(value > 0) return (int)(value + 0.5);
  else          return (int)(value - 0.5);
}
/* 0〜max までの乱数の発生(int型) */
int random(int max,unsigned long* idum)
{
  *idum=(*idum)*1103515245 + 12345;
  return rintv(max * ((double)(*idum/65536 % 32768) / (double)32767));
}

int main()
{
    int i,cpos;
    char str[8]="murakami";
    unsigned long idum;

    idum = time(NULL); /* 乱数発生のための変数の初期化 */
    for(i=0;i<10;i++){
        cpos = random(8,&idum);
        printf("[%d]:%c,",cpos,str[cpos]);
    }
    printf("\n");
    return 0;
}
実行結果
Gami[822]% list_14.exe
[2]:r,[6]:m,[1]:u,[1]:u,[7]:i,[3]:a,[5]:a,[5]:a,[4]:k,[8],
Gami[823]%
inserted by FC2 system