关于函数内部方程的简单问题

时间:2010-06-24 02:55:58

标签: c++ function

嘿,基本上我有这个问题,我试图将一个方程式放在一个函数中,但它似乎没有将值设置为函数,而是根本不改变它。

这是一个捕食者猎物模拟,我在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

3 个答案:

答案 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的参数。