嘿,基本上我有这个问题,我试图将一个方程式放在一个函数中,但它似乎没有将值设置为函数,而是根本不改变它。
这是一个捕食者猎物模拟,我在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;
}
并将值设置为
rabbits[i+1] = calcRabbits ( rabbits[i], rBr, I, wolves[i]);
wolves[i+1] = calcWolves(wBr, wolves[i], I, S, rabbits[i]);
这些值与初始化时的值保持不变,似乎根本不起作用,我不明白为什么。我已经在这里工作了好几个小时,这可能是我想念的东西,但我无法理解。
感谢任何和所有帮助。
编辑:我意识到参数是错误的,但我之前尝试使用正确的参数并且它仍然无法正常工作,只是意外地将其更改为错误的参数(编译器鼠标悬停显示旧版本的参数)< / p>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];
}
编辑:我意识到我的错误,我把rBr和wBr作为整数,并且它们是数字低于1的浮点数,因此它们被自动转换为0.谢谢sje
答案 0 :(得分:0)
Phil我的代码中看不到任何明显错误。
我的预感是你搞乱了参数。
此时使用gdb会过度杀戮。我建议你在calcRabbits和calcWolves中输出打印输出。打印出所有参数,新值和迭代次数。这将使您对正在发生的事情有所了解,并将有助于追踪问题。
您是否拥有初始化代码,我们可以尝试测试并运行?
答案 1 :(得分: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>
。
如果您仍然遇到问题,我会cout << "Days: " << days << endl;
确保您从getDays()
返回正确的号码。如果你得到零,它似乎表现在“循环不工作”。
答案 2 :(得分:0)
我使用整数作为double的参数。