Ю2.19

Задача

   Привал.

Путник двигался   [latex]t_{1}[/latex]   часов со скоростью   [latex]v_{1}[/latex]  , затем  [latex]t_{2}[/latex]   часов — со скоростью  [latex]v_{2}[/latex]  и  [latex]t_{3}[/latex]  часов — со скоростью   [latex]v_{3}[/latex] .

За какое время он одолел первую половину пути, после чего запланировал привал?

[latex]t_{1}[/latex] [latex]t_{2}[/latex] [latex]t_{3}[/latex]  [latex]v_{1}[/latex]  [latex]v_{2}[/latex] [latex]v_{3}[/latex] Результат Комментарии
2 3 4 90 80 30 3.125 пройдено
9 85 3 450 230 20 42.826 пройдено
 4.5 75.9 3.124 100 0  0  2.25 продено

 

Код программы:

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

Расстояние и время вычисляется по формулам:

[latex]s=t\cdot v[/latex]

 

[latex]t=\frac{s}{v}[/latex]

Так как значения времени и скорости не могут быть отрицательными, то дополнительно были проверены граничные условия для скорости и времени.

 

Ссылка на код здесь.

Второе решение:

ссылка на  код 

Решение на Java:

 

 

Денисова Ольга
Денисова Ольга

Latest posts by Денисова Ольга (see all)

4 thoughts on “Ю2.19

  1. 1. Проверять корректность данных не нужно.
    2. Если Вы уже сделали структуру, то почему работаете как с отдельными переменными? Например, передаете в функцию get_length отдельные поля и потом полю же и присваиваете. Нужно просто передать всю структуру и пусть внутри функции все вычисляет и присваивает.
    3. Удивительно много кода вышло для такой задачи. как думаете, почему?

    • 1. Функцию is_params_valid я убрала.
      2. И модифицировала соответствующим образом процедуру ( calc_length ).
      3. Задача расчета разбита на под-задачи, введены дополнительные структуры данных. Это требует больше кода. Но это упрощает чтение и внесение изменений в программу в дальнейшем.

  2. Ольга, не обижайтесь, но я такое решение не приму.
    Задача рассчитана на человека изучающего язык первую неделю. Решается она в несколько строчек. Даже если подробно расписывать, то:
    1. Находим общий путь (3 умножения и 2 сложения). Делим пополам и запоминаем в переменной s.
    2. Если (t = S / v1) <= t1, значит привал был на первом участке и ответ t. Иначе t = t1 и проверяем дальше. 3. Если (tmp = (S - S1) / v2) <= t2, значит привал был на втором участке и ответ t += tmp. Иначе t += t2 и проверяем дальше. 4. t += (S - S1 - S2) /v3 и это ответ. Так получится? Я ничего не напутал? Вы проделали большую и сложную работу. Потратьте, пожалуйста, ещё немного времени, чтобы написать новый вариант программы по той схеме, которую я Вам порекомендовал. Добавьте новый код к Вашему отчёту. Будут ли обе программы давать одинаковый ответ?

Добавить комментарий