2012-09-18 3 views
1

기본적으로 한 쌍의 주사위를 굴리기 위해 난수를 생성하는 프로그램을 작성해야합니다. 이 프로그램은 여러 파일로 구성되어야합니다. main 함수는 하나의 파일에 있어야하고 다른 함수는 두 번째 소스 파일에 있어야하며 프로토 타입은 헤더 파일에 있어야합니다. 첫 번째는 하나의 6면 다이의 롤링을 시뮬레이션하기 위해 1에서 6 사이의 무작위 값을 반환하는 짧은 함수를 작성합니다. 둘째,이 함수를 두 번 호출하여 한 쌍의 주사위를 굴리는 것처럼 보이는 함수를 작성합니다. 내 프로그램은 몇 개의 롤을 만들어야하는지 사용자에게 묻는 것으로 시작됩니다. 그렇다면 몇 번이나 주사위를 굴려서 시뮬레이션하는 함수를 작성하여 정확하게 2,3,4,5,6,7,8,9,10,11,12의 숫자를 몇 번이나 계산했는지 (각 숫자는 한 쌍의 주사위의 합)이 배열에서 발생합니다. 나중에 내가 이상적으로 인쇄 별표의 수는 수에 해당하는 144 롤의 샘플, 아래 같이 보일 것이 카운트 사용하여 작은 막대 차트를 표시하는 함수를 작성 :C++에서 난수를 생성하는 코드

2 3 4 5 6 7 8 9 10 11 12 
* * * * * * * * *  *  * 
* * * * * * * * *  *  * 
* * * * * * * * *  *  * 
* * * * * * * * *  *  * 
    * * * * * * * *  *  

다음을 참조합니다 난수 생성기가 얼마나 잘 수행하는지, 롤백 된 평균값을 계산하는 함수를 작성합니다. 이것을 이상적인 평균 인 7과 비교하십시오. 또한, 프로그램에 의해 만들어진 각 롤의 수, 롤의 총 ​​수를 감안할 때 위의 빈도를 기준으로 한 이상적인 수와 개별적인 열. 이것은 지금까지 내 불완전 코드 : "컴파일러 비주얼 스튜디오 2010"

int rolling(){ //Function that returns a random value between 1 and 6 
rand(unsigned(time(NULL))); 
int dice = 1 + (rand() %6); 
return dice; 
} 
int roll_dice(int num1,int num2){ //it calls 'rolling function' twice 
int result1,result2; 
num1 = rolling(); 
num2 = rolling(); 
result1 = num1; 
result2 = num2; 
return result1,result2; 
} 
int main(void){ 
int times,i,sum,n1,n2; 
int c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11;//counters for each sum 
printf("Please enter how many times you want to roll the dice.\n") 
scanf_s("%i",&times); 

나는 각각의 합을 계산하고 배열의 수 (개수)를 저장하는 카운터를 사용하는 척. 루프 (for)와 조건문 (if)이 필요하다는 것을 압니다. 그러나 주된 문제는 roll_dice에서 값을 가져 와서 n1과 n2에 저장하는 것입니다. 그래서 그들을 합산하고 합계를 'sum'에 저장할 수 있습니다.

+3

질문은 무엇입니까? – nneonneo

+9

참고 : 모든 통화가 시작되기 전에'rand '를 시드하면 문제가 발생합니다. 호출 간 간격이 1 초 미만이면 동일한 결과를 얻을 수 있습니다 *. – nneonneo

+0

카운터에 배열을 사용해야합니다. 또한 카운터가 11 개 밖에 없으므로 12가 필요합니다. – Jarryd

답변

0
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int RollDice() 
{ 
    return rand() % 6 + 1; 
} 

int main() 
{ 
    int times, i, cont; 
    int count[11]; 

    srand(time(NULL)); 

    printf("Please enter how many times you want to roll the dice: "); 
    scanf("%i", &times); 

    if (times <= 0) 
    { 
     fprintf(stderr, "Invalid value.\n"); 
     return -1; 
    } 

    for (i = 0; i < 11; i++) 
    { 
     count[i] = 0; 
    } 

    for (i = 0; i < times; i++) 
    { 
     int result = RollDice() + RollDice(); 
     if (result < 2 || result > 12) 
     { 
      fprintf(stderr, "something goes wrong\n"); 
      return -1; 
     } 

     ++count[result - 2]; 
    } 

    for (i = 2; i <= 12; i++) 
    { 
     printf("%3d", i); 
    } 

    printf("\n"); 

    while (1) 
    { 
     cont = 0; 

     for (i = 0; i < 11; i++) 
     { 
      printf(" %c", (count[i] > 0) ? '*' : ' '); 
      if (count[i] > 0) 
      { 
       if (--count[i] > 0) 
       { 
        cont = 1; 
       } 
      } 
     } 

     printf("\n"); 

     if (!cont) 
     { 
      break; 
     } 
    } 

    return 0; 
} 
+0

새로운 사용자 팁 : 순수한 코드를 제외하고 몇 가지 설명, 단지 몇 마디를 포함하면 아프다 :) –

+0

도움을 주신 많은 분들께 고마워.하지만 실행시 약간의 문제가있다. 시간을 입력하고 Enter 키를 누르면 디버그 오류 메시지가 나타납니다 : "런타임 검사 실패 # 2_Stack 변수 'count'주위가 손상되었습니다. 다시 생각해 볼 아이디어 나 단서. – user1678927

+0

죄송합니다. 오타가 있습니다. - "for (i = 0; i <12; i ++)"대신 "for (i = 0; i <11; – Whistler

0

오지를 롤링하는 기능을 만들고 합계를 반환합니다.

int Roll(int numberOfTimes) 
{ 
    int temp = numberOfTimes; 
    int sum = 0; 
    int dice1 = 0; 
    int dice2 = 0; 

    for (int i = 0; < temp; i++) 
    { 
     dice1 = 1 + (rand() % 6); 
     dice2 = 1 + (rand() % 6); 
     sum = dice1 + dice2; 
    } 

    return sum; 
} 

테스트하지는 않았지만 도움이 될 수 있습니다.

5

C++ 11을 사용할 수있는 경우 라이브러리를 사용할 수 있습니다. 페이지에서

하십시오 빠르게 이동 시간 값

uniform_int_distribution<int> one_to_six {1,6}; // distribution that maps to the ints 1..6 
default_random_engine re {};      // the default engine 

int x = one_to_six(re); // x becomes a value in [1:6] 

당신 차가운 씨.

std::chrono::time_point<std::chrono::system_clock> 
    now {std::chrono::system_clock::now()}; 
std::chrono::system_clock::duration 
    epoch {now.time_since_epoch()}; 
typedef std::chrono::duration<unsigned long long int, std::milli> ms; 

std::default_random_engine re {std::chrono::duration_cast<ms>(epoch).count()}; 
관련 문제