Назад к задачам
Junior — Senior
11

Оптимизация и рефакторинг функции расчёта максимального времени

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В задаче требуется улучшить структуру и читаемость уже написанного кода, отвечающего за вычисление максимального времени, необходимого набору устройств пройти заданное расстояние S. Ниже приведён исходный фрагмент на C, который необходимо проанализировать и привести к более чистому виду, сохранив его функциональность.

/*
There are several devices, connected in chain like this:

start_idx---|
            |
D - D - D - A - A - A - A - B - B - D - D
            |-------- N --------|

Task is to get speeds of N devices, and calculate max time to traverse some distance S.
*/

# define A 4
# define B 2

# define N A + B

// Get speed of device with index `idx`
double get_motor_speed(int idx);

static float counter = 0;

// Calculate the max time for the motors to traverse the distance `S`
double calc_max_time(double S, int start_idx)
{
    double t[N];
    for (int i = 0, n = start_idx; i < N; i++, n++)
    {
        double v = get_motor_speed(n);
        counter += 1;

        if (v == 0)
            printf("error, can't divide by zero\n");
        else
        {
            printf("%f\n", S / v);
            t[i] = S / v;
        }
    }

    double result = 0;

    for (int i = 0; i < N; i++)
    {
        if (t[i] > result)
            result = t[i];
    }

    return result;
}

Необходимо:

  • устранить дублирование кода,
  • вынести константы и расчёты в отдельные функции/структуры,
  • обеспечить более понятные имена переменных и комментариев,
  • минимизировать использование глобального состояния (counter).

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