Ю2.20

Как успеть подешевле? Можно ехать на такси со скоростью [latex]v_{1}[/latex] км/ч и оплатой [latex]p_{1}[/latex] pуб/км либо идти пешком со скоростью [latex]v_{2}[/latex] км/ч бесплатно. Как с наименьшими затратами преодолеть путь [latex]s[/latex] за время [latex]t[/latex], если это возможно? Каковы эти затраты?

v1 v2 s t p1 Результат:
30 5 18 2 4 0
50.44 4 75.7 3 5.5 174.975969
62 5 800 5 7 No time
8 17 60 3 8 0

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

По условию задачи нужно выяснить, как с наименьшими затратами преодолеть путь [latex]s[/latex] за время [latex]t[/latex], если это возможно. Вводим переменные с типом данных “double”, так как переменные входят в множество действительных чисел. Необходимо рассмотреть несколько случаев.
Первый случай, когда можно успеть добраться пешком, то есть [latex]s/v_{2}<t[/latex], следовательно оплата равна [latex]0[/latex].
Второй случай, когда скорость пешком больше или равна скорости такси. Если при этом пешком успеть нельзя, тогда выводим «No time», если пешком успеем, то оплата равна 0.

Третий случай, когда можно часть пути проехать на такси, а остаток пройти пешком так, чтобы затраты были минимальными. Для этого надо формулу: [latex]s=v_{1} \cdot t_{1}+v_{2} \cdot t_{2}[/latex] преобразовать в вид: [latex]s=t_{1} \cdot v_{1}+t \cdot v_{2}-t_{1} \cdot v2[/latex] и выразить [latex]t_{1}[/latex], введя переменную [latex]T[/latex](минимальное время езды на такси).
[latex]T = (s-t \cdot v_{2}) / (v_{1}-v_{2})[/latex].
В результате получаем формулу:
[latex]p=(T \cdot v_{1}) \cdot p_{1}[/latex] и считаем [latex]p[/latex].
И наконец четвертый случай,  если невозможно успеть вовремя ни на такси, ни пешком.
Для проверки работы программы можно воспользоваться объектом.

 

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

Ссылка на Java код.

Зелінський Вячеслав Олександрович
Зелінський Вячеслав Олександрович

Latest posts by Зелінський Вячеслав Олександрович (see all)

11 thoughts on “Ю2.20

  1. «и оплатой p1p./км» — что это за формула такая?

    В формулах для обозначения умножения используется не звездочка , а маленькая точка.
    Используйте нижние индексы в мат. формулах, например [latex]v_{1}[/latex]

    У Вас не использованы отступы внутри условного оператора.

    И главное — программа учитывает не все случаи. Вдруг то ли такси медленное, то ли человек очень быстрый и скорости такси и пешком равны. Тогда у Вас получается деление на ноль. А вдруг такси еще медленнее человека?

  2. У Вас уже в 8-й строке double T = (s - t * v2) / (v1 - v2); возможно деление на ноль, и только потом начинается рассмотрение различных случаев — нехорошо.

    Почему в условии s / v2 < t неравенство строгое? Если s= v2 * t — как раз доберемся ровно вовремя пешком.

    “и оплатой p1p./км” наконец-то со второго раза до меня дошло, что это, возможно, пэ один рублей за километр. Оформите по нормальному пэ один — формула с нижним индексом, и рублей за км тоже нормально русскими буквами, одним шрифтом. Кстати, может лучше тогда руб/км?

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

  3. Программа работает правильно. Засчитано 8 баллов т.к. сентябрьское задание выполнено в октябре. Но есть замечания которые нужно поправить:
    — Первое замечание Вы не исправили. Нужно ввести [latex]p_1[/latex]
    — В одной из формул записано v2 вместо v_2.

    Я попробую объяснить решение на графике:
    Если нарисовать график движения, то поучим две прямые. Первая выходит из начала координат, имеет угловой коэффициент v1. Вторая прямая проходит через конечную точку(t,s) с угловым коэффициентом v2. Всё, что нам остаётся найти точку пересечения. Если точку пересечения будет иметь отрицательную координату (T < 0), то мы не успеем ни на такси, ни пешком. весь путь можно проделать пешком. Если точка пересечения лежит правее конечной точки (T > t), то можно смело идти пешком. Если v1=v2, то прямые параллельны (или совпадают). В этом случае, мы либо идём пешком либо не успеваем.
    Предлагаю Вам сделать иллюстрации (вроде моего рисунка) в формате за дополнительные 10 баллов.

  4. Нет ссылки на ideone с Java-решением, да и ссылка на C++-решение уже устарела, программу Вы то поправили — поэтому сложно протестировать программу. А жаль. Вы учли случай «скорости такси и пешком равны» — но что программа выдаст, если «такси еще медленнее человека»? Мне кажется условие на равенство скоростей нужно заменить на нестрогое неравенство.

    • Добавил две ссылки. Случай, когда пешеход быстрее такси учитывается. Если пешеход при этом успевает вовремя, то программа выдаст «0», а если не успевает, то «No time».

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