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

C++ 关于函数内部方程的简单问题,c++,function,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]; 当我执行此操作时,它会按预期工作,并适当

嘿,基本上我有这个问题,我试图把一个方程放在一个函数里面,但是它似乎没有设置函数的值,而是根本没有改变它

这是一个捕食者-猎物模拟,我在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]);
这些值与初始化时的值保持不变,似乎根本不起作用,我也不知道为什么。我已经做了好几个小时了,这可能是我错过的东西,但我无法理解

非常感谢您的帮助

编辑:我意识到参数是错误的,但我以前尝试过使用正确的参数,但仍然不起作用,只是不小心将其更改为错误的参数(编译器鼠标悬停在参数的旧版本上)

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];

    }
days=getDays();//运行函数以获取运行模拟的天数
dayCycle=getCycle();//运行函数get Cycle以获取要修改的天数
整数狼[天];//创建天数大小的数组
int兔[天];//创建天数大小的数组[]
狼[0]=W;//设置狼的起始数量的值
兔子[0]=R;//设置兔子的起始值
for(int i=0;i

编辑:我意识到我的错误,我把rBr和wBr作为整数,它们是浮点数,是低于1的数字,所以它们被自动转换为0。谢谢sje

菲尔,我看不出你的代码有任何明显的错误

我的直觉是你把参数搞乱了

在这一点上使用gdb将是一种过度杀戮。我建议你用calcRabbits和CalcWalves打印出来。打印出所有参数、新值和迭代次数。这将使你对正在发生的事情有一个很好的了解,并有助于追踪问题


您是否有我们可以尝试测试和运行的完整初始化代码?

我不确定这是否是问题所在,但这很糟糕:

天数
在运行时确定。这在C++中是不标准的(对于大量的<代码>天/代码>可能会破坏堆栈),你只应该使用数组大小的常量。您可以动态调整
向量的大小来解决此限制(或堆分配数组)

更改为:

std::vector<int> wolves(days);
std::vector<int> rabbits(days);
它将在堆上动态分配数组。代码的其余部分应该是相同的

如果使用矢量方法,不要忘记包含


如果你仍然有问题,我会
cout我用一个整数作为double的参数。

看不出有什么问题。至少显示整个循环?另外,您可以使用
return((1-wBr)*W+I*S*R*R)
.etcyCalcWolves()的参数顺序似乎不正确。我最初将其设置为仅返回该参数,但当该设置不起作用时,我添加了x,以查看是否出于任何原因可以修复它,不用说没有。你的“rBr”和“wBr”参数类型不应该是浮点型还是双精度型?Amardeph:我曾多次尝试手动重新编写这些部分,以防我粗心的打字错误,因此这些参数看起来不同于在funcs.cpp中意外删除的*/的其他函数的参数,可能必须将其添加回那里。再次感谢Hanks,我将避免使用向量,因为就本课程而言,我们尚未使用向量。天数可以正常工作,因为当我尝试使用原始方程运行它来设置数组的值时,它可以正常工作,因此我认为我可以将函数隔离为错误的原因。不过,谢谢你的建议,一旦我运行了这个程序,我就会阅读向量库。@Phil:它仍然很危险。编辑以显示如何堆分配数组。
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