Простой вопрос относительно уравнения внутри функции - PullRequest
2 голосов
/ 24 июня 2010

Эй, так что в основном у меня есть эта проблема, где я пытаюсь поместить уравнение в функцию, однако, похоже, оно не устанавливает значение для функции и вместо этого не меняет его вообще.

Это симуляция добычи хищника, и у меня есть этот код внутри цикла 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];

    }

Редактировать: я осознал свою ошибку, я поместил rBr и wBr как целые, и они были числами с плавающей точкой, которые были числами ниже 1, поэтому они автоматически конвертировались в 0. Спасибо sje

Ответы [ 3 ]

0 голосов
/ 24 июня 2010

Я не уверен, что это проблема, но это плохо :

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().Если бы вы получили ноль, это, казалось бы, проявлялось в «цикле не работает».

0 голосов
/ 24 июня 2010

Я использовал целое число в качестве аргумента для двойного.

0 голосов
/ 24 июня 2010

Фил Я не вижу ничего явно неправильного в вашем коде.

Я догадываюсь, что вы испортили параметры.

Использование gdb на этом этапе было бы чрезмерным убийством. Я рекомендую размещать распечатки в calcRabbits и calcWolves. Распечатайте все параметры, новое значение и номер итерации. Это даст вам хорошее представление о том, что происходит, и поможет отследить проблему.

У вас есть полный код с инициализацией, который мы могли бы попробовать протестировать и запустить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...