기타 강좌

난수를 사용하기 위해서는

 

srand(( unsigned )time(NULL);

을 해주시면 됩니다. 하는건 자기 마음이겠죠? unsigned int 이렇게 사용하셔도 됩니다.

이렇게 해주셨으면 난수 발생의 범위를 지정해야합니다.

 

난수 발생의 범위를 지정하는 방법은 이렇습니다.


변수 = rand() % (종료 값 - 시작 값 + 1) + 시작 값

100부터 1000 사이의 난수를 발생시키려면
변수 = rand() % (1000 - 100 + 1) + 100
간단히 하면
변수 = rand() % (901) + 100
이렇게 되지요.

 



이건 난수 1,000개를 발생시켜서 최소값, 최대값 출력하는 소스.

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <conio.h>  
  4. #include <time.h>  
  5. int main()  
  6. {  
  7.      int a;  
  8.      int start,end;  
  9.      int max,min;  
  10.      int count;  
  11.        
  12.      srand((unsigned)time(NULL));  
  13.        
  14.      printf("시작 : ");  
  15.      scanf("%d",&start);  
  16.      printf("종료 : ");  
  17.      scanf("%d",&end);  
  18.        
  19.      min=end;  
  20.      max=start;  
  21.        
  22.      for(count=0;count<1000;count++)  
  23.      {  
  24.           a=rand() % (end - start + 1) + start;  
  25.           printf("%4d ",a);  
  26.             
  27.           if(min > a)  
  28.                  min=a;  
  29.           if(max < a)  
  30.                  max=a;  
  31.      }  
  32.        
  33.      printf("n최소 : %d",min);  
  34.      printf("n최대 : %d",max);  
  35.        
  36.      getch();  
  37.      return 0;  
  38. }  
Comment '2'
  • ?
    곤네꼬 2009.01.28 18:51

    저는 100부터 1000까지시 rand()%100+1000 으로 배웟습니다. << 정확하지않음

    그리고 unsigned 가 아닌 unsigned int으로 배웟는데요. << srand(unsigned int)time(NULL)); << 이거 아닌가요?
    제가 틀렷나요?

  • ?
    Last H 2009.02.14 19:37
    음 매우 지난 뒤의 답변이지만 님이 첫번째 쓰신 형태로도 사용합니다만
    그렇게 사용할 시 진정한 의미에서의 랜덤숫자가 성립되지 않습니다.
    난수라지만 일정 패턴을 가져버리죠 즉 저렇게 프로그램을 돌리면 숫자가
    (190,420,145)  <-- 이런식으로 무작위로 나온다고 치면
     다음에 프로그램을 틀어도 (190,420,145) 로 나옵니다. 즉 패턴을 유지하죠
    그래서 이 강좌에서 처럼 주로 타임함수를 호출해서 타이머를 사용합니다. 이때 PC의 타이머 클럭은 CPU속도에 준하기 때문에
    요새 컴퓨터로 약 3기가의 CPU속도라면 같은 패턴을 지는 난수가 나올 확률은 한없이 0에 가깝게 되죠.
    p.s 3기가라면 1초에 3x10^9번의 주기를 갖는 다는겁니다.

    두번째로 unsigned int 라는건 unsigned와는 다른 겁니다 이미 unsigned라는 문장 자체는 일종의
    명령어입니다. 뜻은 간단히 말해 자연수만 받겠다는거죠 즉
    음수를 처리하지 않겟다는 의미입니다. 과거엔 RAM의 사양상 unsigned int를 통해 자연수를 더욱 큰 수까지 입력 받으려고
    주로 사용하였으나 최근엔 일반 프로그래밍에선 그다지 따지지 않습니다. 램이 차고 넘치거든요.
    각종 페이징 기법같은 메모리 관리 방식도 발전해서 효율도 높아졌고요.
    물론 임베디드 관련으로 쓰일땐 자료구조적으로 가장 효율적으로 할 수록 더 작은 기계에 더 많은 기능을 집어 넣을 수 있기때문에
    중요하지만요.

List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 886
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 757
기타 XNA로 게임만들기 - 3. 자신만의 라이브러리를 만들자. 7 file 재훈군 2012.08.03 3454
기타 VirtualDub, Avanti, AviSynth를 사용한 초보적인(?!) DVD -> 동영상 파일 변환법. Alkaid 2012.08.27 3480
시네마4D Cinema4D 맵핑, 매터리얼 기초 메뉴얼 아방스 2010.08.18 3517
C언어 소코반 실행파일+소스+스크린샷 file 정체불명 2012.01.25 3520
C언어 [C언어] for문과 while문에 대해 [Dark].Angel 2009.01.14 3521
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Wide Green Button file 아방스 2011.12.07 3526
C언어 [C언어] 산술연산자, 대입연산자, 증감연산자 란? 2 [Dark].Angel 2009.01.14 3541
기타 윈도우 XP에서 16비트 도스가 실행이 안될때 스크립트 2008.07.25 3567
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Web 2.0 Download Buttons file 아방스 2011.12.07 3575
C언어 [비쥬얼 C++ 동영상 강좌] 01회 Visual C++개요, 간단한 C++맛보기 2 아방스 2009.01.12 3590
C언어 [-구름-] 배열로 큐 구현하기 3 [SST]구름 2009.06.13 3610
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [아스키(ASCII)코드] 1 제니스 2009.06.13 3643
플러그인 [AE Plug-in]RedGiant.Holomatrix.v1.0 file 아방스 2010.03.23 3654
C언어 한글자씩 출력하기 file 정체불명 2012.01.21 3730
기타 인스톨 팩토리 사용법~ 5 file Skybound 2009.05.11 3773
기타 바이러스 제작 모험기 : 상편.shutdown명령어! 4 file 창조자 신 2009.05.16 3779
C언어 [C언어] 난수에 대해 2 [Dark].Angel 2009.01.14 3785
기타 [파이썬] for문 (여러 번 반복하기))9( 6 - 하늘 - 2009.09.11 3877
기타 포토샵 크기 조절 1 제니스 2008.06.22 3914
에프터 이펙트 에픽 플러그인 키젠에 대한 간단한 팁 ^^ 아방스 2010.06.09 3980
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19