2010-06-24 6 views
2

기본적으로이 문제는 함수 내부에 방정식을 넣으려고하지만 함수에 값을 설정하지 않는 것 대신에이 문제가 있습니다. 그것을 전혀 변경하지 마십시오.함수 내부의 방정식에 관한 간단한 질문

이것은 포식자 먹이 시뮬레이션이며이 코드는 for 루프 안에 있습니다.

wolves[i+1] = ((1 - wBr) * wolves[i] + I * S * rabbits[i] * wolves[i]); 
    rabbits[i+1] = (1 + rBr) * rabbits[i] - I * rabbits[i] * wolves[i]; 

내가 이것을 실행하면이 의도 한대로 작동하고 나는 함수 내부에 넣어하려고 할 때 그러나, 적절하게 이러한 배열 모두의 값을 변경,

int calcRabbits(int R, int rBr, int I, int W) 
{ 
    int x = (1 + rBr) * R - I * R * W; 

    return x; 
} 

int calcWolves(int wBr, int W, int I, int S, int R) 
{ 
    int x = ((1 - wBr) * W + I * S * R * R); 
    return x; 

} 

을 그리고 값을 설정 as

rabbits[i+1] = calcRabbits (rabbits[i], rBr, I, wolves[i]); 
    wolves[i+1] = calcWolves(wBr, wolves[i], I, S, rabbits[i]); 

값은 초기화 될 때와 동일하게 유지되며 전혀 작동하지 않는 것 같습니다. 이유는 알 수 없습니다. 나는 좋은 몇 시간 동안이 일을 해왔다. 아마도 그 일은 내가 누락 된 것이지만, 나는 그것을 이해할 수 없다.

모든 도움을 주시면 감사하겠습니다.

편집 : 매개 변수가 잘못되었다는 것을 알았지 만, 올바른 매개 변수를 사용하기 전에 시도했지만 여전히 실수로 잘못된 매개 변수로 변경했습니다 (컴파일러 마우스 오버는 매개 변수의 이전 버전을 표시하고있었습니다)

Edit2가 : 코드의 전체 부분이

days = getDays(); // Runs function to get Number of days to run the simulation for 
    dayCycle = getCycle(); // Runs the function get Cycle to get the # of days to mod by 

    int wolves[days]; // Creates array wolves[] the size of the amount of days 
    int rabbits[days]; // Creates array rabbits [] the size of the amount of days 
    wolves[0] = W; // Sets the value of the starting number of wolves 
    rabbits[0] = R; // sets starting value of rabbits 


    for(int i = 0; i < days; i++) // For loop runs the simulation for the number of days 
    { 



//  rabbits[i+1] = calcRabbits (rabbits[i], rBr, I, wolves[i]);  

// // //This is the code to change the value of both of these using the function 

//  wolves[i+1] = calcWolves(wBr, wolves[i], I, S, rabbits[i]); 



    // This is the code that works and correctly sets the value for wolves[i+1] 

     wolves[i+1] = calcWolves(wBr, wolves[i], I, S, rabbits[i]); 
     rabbits[i+1] = (1 + rBr) * rabbits[i] - I * rabbits[i] * wolves[i]; 

    } 

편집입니다 : 내가하는 int로 RBR 및 WBR를 넣고 있었어요 내 실수를 실현하고, 그래서 1의 밑에 있었다 수 있었다 수레했다 그들은 자동으로 0으로 변환되었습니다. 감사합니다. sje

+1

무엇보다이 점은 잘못되었습니다. 적어도 전체 루프를 보여 주시겠습니까? 또한,'return ((1-wBr) * W + I * S * R * R);을 사용할 수 있습니다. .etc – tcooc

+1

calcWolves()에 대한 매개 변수 순서가 옳지 않은 것 같습니다. –

+0

원래 원래대로 설정 했었지만 작동하지 않을 때 x을 추가하여 어떤 이유로 든 문제를 해결할 수 있는지 여부는 불필요하다고 말할 수있었습니다. –

답변

0

저는 double에 대한 인수로 정수를 사용하고있었습니다.

0

필 코드에서 분명히 잘못된 것을 볼 수 없습니다.

내 직감은 매개 변수가 엉망입니다.

이 시점에서 gdb를 사용하면 지나치게 길어집니다. calcRabbits 및 calcWolves에 인쇄물을 넣어 두는 것이 좋습니다. 모든 매개 변수, 새 값 및 반복 번호를 인쇄하십시오. 그러면 진행 상황을 파악하고 문제를 추적하는 데 도움이됩니다.

테스트 및 실행을 위해 초기화 할 수있는 전체 코드가 있습니까?

+0

실수로 funcs.cpp에서 a * /를 삭제 했으므로 거기에 다시 추가해야 할 수도 있습니다. 다시 한 번 감사합니다. –

0

나는이 방법으로 문제가 있는지 모르겠지만,이 나쁜입니다 :

int wolves[days]; // Creates array wolves[] the size of the amount of days 
int rabbits[days]; // Creates array rabbits [] the size of the amount of days 

days 런타임에 결정됩니다. 이것은 C++에서 비표준이며 (많은 수의 스택을 파괴 할 수있는 days) 배열 크기의 상수 만 사용해야합니다. 이 제한 사항을 해결하려면 동적으로 vector의 크기를 조정하거나 배열을 할당하십시오.이것에

변경 :

std::vector<int> wolves(days); 
std::vector<int> rabbits(days); 

또는 이것에

가 :

int *wolves = new int[days]; 
int *rabbits = new int[days]; 

// all your code goes here 

delete [] wolves; // when you're done 
delete [] rabbits; // when you're done 

동적으로 힙에 배열을 할당합니다. 나머지 코드는 똑같이 작동해야합니다.

벡터 접근 방식을 사용하는 경우 #include <vector>을 잊지 마세요.

그래도 문제가 해결되면 getDays()에서 올바른 번호를 다시받을 수 있도록 cout << "Days: " << days << endl;이됩니다. 당신이 0이라면, 그것은 "작동하지 않는 루프"에서 스스로를 드러내는 것처럼 보일 것입니다.

+0

고맙습니다. 수업을 목적으로 아직 사용하지 않았기 때문에 벡터 사용을 자제하겠습니다. 배열의 값을 설정하기 위해 원래 방정식을 사용하여 실행하려고하면 작동하므로 오류의 원인으로 함수를 격리 할 수 ​​있기 때문에 일 수가 많습니다. 조언을 주셔서 감사합니다. 실행이 완료 되 자마자 벡터 라이브러리를 읽어 보겠습니다. –

+0

@ Phil : 아직도 위험합니다. 배열을 힙에 할당하는 방법을 보여주기 위해 편집되었습니다. – Stephen