• Как вывести сумму итераций цикла?

    includedlibrary
    @includedlibrary
    Небольшая рекомендация - указывайте типы аргументов в функциях и сами аргументы в прототипах:
    int start_int();
    int end_int(int start_int);
    int calculate(int start_int, int end_int);


    Решение - нужно переписать функцию calculate следующим образом:
    1. n++ нужно перенести в while, чтобы переменная n увеличивалась каждую итерацию.
    2. Установить начальное значение k в start_int, так как k - текущий размер популяции.
    3. Вместо start_int для обновления k использовать само значение k, по правилам обновления размера популяции
    4. Убрать printf, так как функция calculate должна находить количество итераций, его вывод лучше переместить в main.
    5. Убрать скобки вокруг return, оборачивать return в блок нет никакого смысла.
    6. Вернуть n вместо start_int.


    int calculate(int start_int, int end_int) {
        int k = start_int; //текущий размер популяции
        int n = 0; //счетчик
    
        do {
            k = k + (k / 3) - (k / 4);
            n++;           //инкремент счетчика
        } while (k < end_int);
    
        return n; //возврат количества итераций
    }
    Ответ написан
    7 комментариев
  • Почему первый цикл запускается повторно?

    @res2001
    Developer, ex-admin
    Если удалить эту часть, то программа работает исправно, за исключением повторного исполнения первого цикла do while.

    Вы же сами повторно вызываете start_int() в предложении while, отсюда и повторный вызов.
    Вам нужно передать в end_int() сохраненный результат выполнения start_int. И в while сравнивать с ним, не вызывая start_int повторно.
    Ответ написан
    3 комментария
  • Куда вписать printf?

    myjcom
    @myjcom
    int main()
    {
      int n = 0;
      while((n = get_int("set a starting population size: ")) < 9)
      {
        printf("...");
      }
    }
    Ответ написан
    6 комментариев