2013-04-14 2 views
-1

나는 다른 선택 가능성을 가진 배열을 가지고 있습니다. 예 :배열을 가진 확률 C++

배열 1에는 {5, 3, 2, 7, 1} 값이 있습니다. 선택 "0"은 5/18 확률, 선택 "1"은 3/18 확률 ... 등이 있습니다. "18"은 배열 값의 합계입니다. 그러나 나는 문제가 코드의이 부분에 놓여 의심,

int i = rand() % sumofvaluesofarray; //edited from array_size 
int c = 0; 
int sum = 0; 
while(c < 8){ 
    sum += array[c]; 
    if(i < sum){ 
     choice = c; 
     break; 
    } 
    c += 1; 
} 

이 작동하지 않는 프로그램의 모든 부분입니다 :

여기에 (우리가 8 개 선택이이 경우에) 내 코드입니다. 거기에 문제가 있습니까? 그리고이 코드를 더 효율적으로 작성하는 방법이 있습니까?

+0

"문제는이 코드 부분에 있습니다." 무슨 문제? –

+0

'' –

+0

코드를 수정하지 마십시오. 컴파일중인 코드를 정확히 게시했는지 확인하십시오. 문제가 무엇입니까? 오류가 있습니까? 그렇다면 무엇입니까? –

답변

3

Asker는 코드를 계속 변경합니다. 미래의 질문 작성자를위한 노트 : 컴파일 할 때 코드를 정확하게 게시하십시오.

몇 가지 문제가있는 것 같습니다. 첫째로, 당신은하지 배열의 크기로, 18에 임의의 숫자를 생성해야하는 것은 : RAND_MAX 경우

int i = rand() % 18; 

참고이 반드시 그것은 단지 것이다 (균일 한 분포에 따라 당신에게 i를 제공하지 않습니다 18의 배수). 대신 5해야 할 때

또한, 당신은 최대 8 c 반복됩니다

while(c < 5){ 

그렇지 않으면 당신이 array의 경계 외부에서 액세스 할 수 있습니다.

또한이 줄 전폭 SEMICOLON 유니 코드 문자 (U + FF1B)이 있습니다

sum += array[c]; 
//   ^

당신이 그것이 어쩌면, 문서 복사 했는가를? 일반 SEMICOLON 문자 (U + 003B)인지 확인하십시오.

당신이 C++ 11 컴파일러를 사용하는 경우, 효율적이 작성하는 방법에 대한 걱정을 중지하고 그냥 <random> 헤더를 사용 할 수 있습니다 :이

std::random_device rd; 
std::mt19937 gen(rd()); 
std::discrete_distribution<> d(std::begin(array), std::end(array)); 

을, 당신은 임의의 값을 생성 할 수 있습니다 이산 분포에 따라 d(gen)으로 전화하십시오.

+0

당신이 지적한 것을 반영하기 위해 제 질문을 편집했습니다. 이번에는 8 개의 선택을 할 수 있기 때문에 최대 8 개를 찾고 있습니다. 배열 [0] -array [7]에는 8 개 선택을위한 확률값이 들어 있습니다. 또한 C++을 배우기 시작 했으므로 두 번째 제안, 특히 서식에 익숙하지 않습니다. – kir

+0

@ user2280704 그래서 문제가 무엇입니까? 당신은 아직 우리에게 말하지 않았습니다. 오류가 발생하면 그 사실을 알려주십시오. 기대 한대로 행동하지 않는다면, 그것이 무엇을하는지 말해주십시오. –

+0

제 문제는 프로그램을 디버깅하는 데 문제가 있다는 것입니다. 이 코드는 내 프로그램의 일부분에 불과하며이 코드에 문제가 있는지 궁금합니다. 기본적으로 내 주요 문제는 내 프로그램에 확률 개념을 구현하는 방법을 잘 모르겠다. 그리고 내가 제대로하고 있는지 명확하게 묻는다. – kir

2
int i = rand() % size_array; 
int c = 0; 
int sum = 0; 
while(c < 8){ 
    sum += array[c]; // Missing semicolon 
    if(i < sum){ 
    choice = c; 
    break; 
    } 
    c += 1; 
} 

거기에 세미콜론이 누락되었습니다.

0

코드의 알고리즘이 올바르게 작동하는지 알고 싶으면 함수에 쓰기하고 unit tests을 작성하십시오. 이 방법으로 예상 결과와 비교할 수있는 미리 결정된 매개 변수 집합에 함수를 공급할 수 있습니다. 이제 디버깅 세션에 들어가면 함수가 제대로 작동한다는 것을 합리적으로 가정하고 코드의 다른 영역에 집중할 수 있습니다.

+0

예 저는 그 일을했고이 프로그램의 일부가 작동하고 있다는 것을 알았습니다. 고맙습니다. – kir