Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
11
Оптимизация и рефакторинг функции расчёта максимального времени
Условие задачи
В задаче требуется улучшить структуру и читаемость уже написанного кода, отвечающего за вычисление максимального времени, необходимого набору устройств пройти заданное расстояние 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).
В результате полученный код должен быть легче поддерживать и тестировать, при этом сохранять исходную бизнес‑логику.