А19

Задача: Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу, если известны их начальные скорости,ускорения и начальное расстояние между ними.

[latex]a_1[/latex] [latex]a_2[/latex] [latex]V_{01}[/latex] [latex]V_{02}[/latex] [latex]S[/latex] [latex] t[/latex] Комментарий
1 1 1 1 1 0.41 Пройден
3.2 2.1 3 7.5 20.8 1.45 Пройден
0 0 4 1 8 1.6 Пройден
В задаче нужно найти время,  через которое встретятся два тела, двигающихся равноускоренно, зная начальные скорости и ускорения этих тел, а также расстояние между ними.

Для решения этой задачи  использовались формулы:

[latex]S=V_0t+\frac{at^2}{2}[/latex]

Так как расстояние делится на две части, то получаем:

[latex]S=V_{01}t+\frac{a_1t^2}{2}[/latex],

[latex]S=S_0 — V_{02}t+\frac{a_2t^2}{2}[/latex]

Значит  [latex]S_0=V_{01}t+\frac{a_1t^2}{2}+V_{02}t+\frac{a_2t^2}{2}[/latex]. Получаем уравнение времени:

[latex]t^2(\frac{a_1+a_2}{2})+t(V_{01}+V_{02})-S_0=0[/latex]

Упрощаем коэффициенты  уравнения :

[latex]a=\frac{a_1+a_2}{2}[/latex],    [latex]b=V_{01}+V_{02}[/latex],    [latex]at^2+bt-S_0=0[/latex]

Если [latex]a=0[/latex],  находим корень уравнения  по формуле [latex]t=\frac{S_0}{b}[/latex]. Если же [latex]a[/latex] не равняется нулю, находим дискриминант по формуле [latex]D=b^2+4aS[/latex], дискриминант в данной задаче всегда положителен. Нет смысла находить время по формуле [latex]t=\frac{b^2-\sqrt{D}}{2a}[/latex], так как время не может быть отрицательным, остается использовать [latex]t=\frac{b^2+\sqrt{D}}{2a}[/latex] — это и будет искомое время.

Ссылка на Ideone

Код для Java

Ссылка на Ideone

Оніщенко Олександр
Оніщенко Олександр

Latest posts by Оніщенко Олександр (see all)

8 thoughts on “А19

  1. 1. Оформление. В тексте условия задачи сделаны 3 абзаца прямо в середине предложений. Так нельзя. Удалите лишние переводы строки. Переход на новую строку осуществляется автоматически в зависимости то ширины окна и величины шрифта. вам нужно заботиться только об абзацах. Весь текст немотивированно «украшен» пустыми строками. Уберите их, пожалуйста. В тексте «Присваиваем коэффициентам a и b » a и b тоже формулы.
    2. Обозначение для начальных скоростей выбраны неудачно. Опустите второй индекс вниз. Иначе он выглядит как сомножитель — v_{01}
    3. Как Вы разбираетесь со знаками корней? Опишите. Какими они могут быть?

  2. — Формулы перед «Значит…» нужно разделить запятыми иначе они сливаются.
    — В формуле после «Значит…» потеряны «попаламы» у ускорений.
    — Дальше «попаламы» не появились, зато путь удвоился. Так можно, но тогда нужно и сумму скоростей удвоить.

    Саша! Тесты пишутся именно для того, чтобы проверить правильность решения. Нужен тест, который Вы можете просчитать в уме или на бумаге. Например, 0 0 1 1 2. Ускорений нет, скорости 1, расстояние 2. Через сколько встретятся? Через 1.
    Что пишет Ваша программа — через 0 секунд. Ну, ежу ясно, что где-то ошибка.

    Не будете писать тесты, оценка будет ниже, чем вы можете получить. Мне будет обидно. Поверьте, если бы тесты в реале были не нужны, Вам бы про них ничего не говорили. Но мы с коллегами немного понимаем в «промышленном программировании». Уж, поверьте.

  3. Вот зачем врать? Честные тесты с ненулевым ускорением и близко не проходят.
    Теперь Вы саму формулу равноускоренного движения неправильно записали — квадрат у времени, а не у ускорения.

    Саша, я попытался убедить Вас в важности «ручного» составления разумных тестов. Видимо не смог. Вы продолжаете упрямиться и вынуждаете меня проверять сырой код, который сами не тестировали всерьёз. В оформлении кода даже отступов нет.

  4. — Формулы после “Упрощаем коэффициенты уравнения” нужно разделить запятыми иначе они сливаются.
    — В Вашей версии «уравнение времени» имеет 4-ю степень. Коэффициентами называются ЧИСЛА при переменной. Коэффициенты не могут зависеть от самой переменной. Странно, что вы не можете привести подобные и вынести за скобки.
    — Поставьте правильные отступы в программе
    — Уберите 10 пустых строк в конце текста
    — Почему среднеарифметическое модулей корней даёт ответ на вопрос задачи?
    — Вы заметили, что по Вашим формулам оба объекта начинают движение из одной и той же точки. А по условию — из разных.

    Не хотите подумать? Это простенькая школьная задача. Может Вам рисунок сделать?

  5. А почему строка D= b*b + 4*a*s; не в условном операторе? Она имеет смысл при a равном нулю?
    В С++ версии она у Вас в условном операторе…

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