Математические загадки. Задачи на сближение и удаление Если два объекта друг от друга
идеальный мавен (3)
Я многому учусь о шаблонах дизайна, когда я строю свою собственную систему для своих проектов. И я хочу спросить вас о вопросе дизайна, на который я не могу найти ответ.
В настоящее время я создаю небольшой Chat-сервер, используя сокеты, с несколькими клиентами. Сейчас у меня есть три класса:
- Person-class, который содержит информацию как ник, возраст и объект Room.
- Room-class, который содержит информацию, такую как имя комнаты, тему и список лиц, которые сейчас находятся в этой комнате.
- Отель-класс, который имеет список лиц и список номеров на сервере.
Я сделал диаграмму, чтобы проиллюстрировать ее:
У меня есть список людей на сервере в отеле-классе, потому что было бы неплохо отслеживать, сколько сейчас есть онлайн (без необходимости проходить через все комнаты). Люди живут в отеле-классе, потому что я хотел бы иметь возможность искать конкретного человека, не ища номера.
Это плохой дизайн? Есть ли другой способ добиться этого?
Благодарю.
В более крупной системе это было бы плохо, но поскольку из того, что я понимаю в ваших приложениях, эти три класса используются только совместно, это не большая проблема. Просто не забудьте указать переменные-члены человека так, чтобы они указывали, что они содержат ссылку на комнату, а не на экземпляр.
Кроме того, если это не так по соображениям производительности (например, у вас будет огромное количество комнат), вероятно, было бы более чистым сделать недвижимость или геттер, который будет перебирать комнаты и собирать людей, а не кэшировать их в отеле.
Взаимная зависимость не плоха сама по себе. Иногда это требует использование данных.
Я думаю об этом по-другому. Будет проще поддерживать код, в котором меньше отношений вообще - взаимная зависимость или нет. Просто держите его как можно проще. Единственной дополнительной сложностью в вашей ситуации иногда является проблема с проверкой и яйцом во время создания и удаления последовательностей. У вас больше ссылок на бухгалтерию.
Если вы спрашиваете, нужен ли вам список людей в отеле в этом случае, я думаю, что есть два ответа. Я бы начал с того, что ваши объекты (в памяти) обеспечивали эти отношения, но вам не нужна дополнительная таблица соединений между людьми и гостиницами в базе данных. Если вы используете Hibernate, он автоматически генерирует эффективное соединение для вас, если вы попросите его для людей в отеле (он присоединится к отелям на номера.hotel_id для вас).
Строго говоря, проблема взаимной зависимости между классами может быть решена с помощью интерфейсов (абстрактных классов, если ваш язык, например, C ++ или Python) IRoom и IPerson ; в псевдокоде
Interface IPerson
IRoom getRoom()
// etc
interface IRoom
iter
это делает только интерфейсы взаимозависимыми друг от друга - фактические реализации интерфейсов должны зависеть только от интерфейсов.
Это также дает вам много возможностей с точки зрения реализации, если вы хотите избежать циклических эталонных циклов (что может быть опасным, например, в CPython путем замедления сбора мусора) - вы можете использовать слабые ссылки, базовую реляционную базу данных с типичной " от одного до многих отношений "и т. д. и т. д. И для первого простого прототипа вы можете использовать то, что проще на выбранном вами языке (возможно, просто и, увы, обязательно круговое, ссылки [[указатели, на C ++]] с Person ссылающимся на Room и Room в list
Задачи на движение навстречу друг другу (встречное движение) — один из трех основных видов задач на движение.
Если два объекта движутся навстречу друг другу, то они сближаются:
Чтобы найти скорость сближения двух объектов, движущихся навстречу друг другу, надо сложить их скорости:
Скорость сближения больше, чем скорость каждого из них.
Скорость, время и расстояние связаны между собой :
Рассмотрим некоторые задачи на встречное движение.
Задача 1
Два велосипедиста выехали навстречу друг другу. Скорость одного из низ 12 км/ч, а другого — 10 км/ч. Через 3 часа они встретились. Какое расстояние было между ними в начале пути?
Условие задач на движение удобно оформлять в виде таблицы:
1) 12+10=22 (км/ч) скорость сближения велосипедистов
2) 22∙3=66 (км) было между велосипедистами в начале пути.
Ответ: 66 км.
Задача 2
Два поезда идут навстречу друг другу. Скорость одного из них 50 км/ч, скорость другого — 60 км/ч. Сейчас между ними 440 км. Через сколько часов они встретятся?
1) 60+50=110 (км/ч) скорость сближения поездов
2) 440:110=4 (ч) время, через которое поезда встретятся.
Ответ: через 4 ч.
Задача 3.
Два пешехода находились на расстоянии 20 км друг от друга. Они вышли одновременно навстречу друг другу и встретились через 2 часа. Скорость одного пешехода 6 км/ч. Найти скорость другого пешехода.
I пешеход |
|||
II пешеход |
1) 20:2=10 (км/ч) скорость сближения пешеходов
2) 10-6=4 (км/ч) скорость другого пешехода.
Ответ: 4 км/ч.
Для начала вспомним формулы, которые используют при решении подобных задач: S = υ·t
, υ = S: t
, t = S: υ
где S – расстояние, υ – скорость движения, t – время движения.
Когда два объекта движутся равномерно с разными скоростями, то расстояние между ними за каждую единицу времени или увеличивается, или уменьшается.
Скорость сближения
– это расстояние, на которое сближаются объекты за единицу времени.
Скорость удаления
– это расстояние, на которое удаляются объекты за единицу времени.
Движение на сближение встречное движение и движение вдогонку . Движение на удаление можно разделить на два вида: движение в противоположных направлениях и движение с отставанием .
Трудность для некоторых учеников заключается в том, чтобы правильно поставить «+» или «–» между скоростями при нахождении скорости сближения объектов или скорости удаления.
Рассмотрим таблицу.
Из неё видно, что при движении объектов в противоположные стороны их скорости складываются . При движении в одну сторону – вычитаются .
Примеры решения задач.
Задача №1.
Две автомашины движутся навстречу друг другу со скоростями 60км/ч и 80 км/ч. Определите скорость сближения машин.
υ 1 = 60 км/ч
υ 2 = 80 км/ч
Найти υ сб
Решение.
υ сб = υ 1 + υ 2
– скорость сближения в разных направлениях
)
υ сб = 60 + 80 = 140 (км/ч)
Ответ:
скорость сближения 140 км/ч.
Задача №2.
Из одного пункта в противоположных направлениях выехали две автомашины со скоростями 60 км/ч и 80 км/ч. Определите скорость удаления машин.
υ 1 = 60 км/ч
υ 2 = 80 км/ч
Найти υ уд
Решение.
υ уд = υ 1 + υ 2
– скорость удаления (знак «+» так как из условия понятно, что машины движутся в разных направлениях
)
υ уд = 80 + 60 = 140 (км/ч)
Ответ:
скорость удаления 140 км/ч.
Задача №3.
Из одного пункта в одном направлении выехали сначала автомобиль со скоростью 60 км/ч, а затем мотоцикл со скоростью 80 км/ч. Определите скорость сближения машин.
(Видим, что здесь случай движения вдогонку, поэтому находим скорость сближения)
υ ав = 60 км/ч
υ мот = 80 км/ч
Найти υ сб
Решение.
υ сб = υ 1 – υ 2
– скорость сближения (знак «–» так как из условия понятно, что машины движутся в одном направлении
)
υ сб = 80 – 60 = 20 (км/ч)
Ответ:
скорость сближения 20 км/ч.
То есть название скорости – сближения или удаления – не влияют на знак между скоростями. Имеет значение только направление движения .
Рассмотрим другие задачи.
Задача № 4.
Из одного пункта в противоположных направлениях вышли два пешехода. Скорость одного из них 5 км/ч, другого – 4 км/ч. Какое расстояние будет между ними через 3 ч?
υ 1 = 5 км/ч
υ 2 = 4 км/ч
t = 3 ч
Найти S
Решение.
в разных направлениях
)
υ уд = 5 + 4 = 9 (км/ч)
S = υ уд ·t
S = 9·3 = 27 (км)
Ответ:
через 3 ч расстояние будет 27 км.
Задача № 5.
Два велосипедиста одновременно выехали навстречу друг другу из двух пунктов, расстояние между которыми 36 км. Скорость первого 10 км/ч, второго 8 км/ч. Через сколько часов они встретятся?
S = 36 км
υ 1 = 10 км/ч
υ 2 = 8 км/ч
Найти t
Решение.
υ сб = υ 1 + υ 2 – скорость сближения
(знак «+» так как из условия понятно, что машины движутся в разных направлениях
)
υ сб = 10 + 8 = 18 (км/ч)
(время встречи можно рассчитать по формуле)
t = S: υ сб
t = 36: 18 = 2 (ч)
Ответ:
встретятся через 2 ч.
Задача №6. Два поезда отошли от одной станции в противоположных направлениях. Их скорости 60 км/ч и 70км/ч. Через сколько часов расстояние между ними будет 260 км?
υ 1 = 60 км/ч
υ 2 = 70 км/ч
S = 260 км
Найти t
Решение
.
1 способ
υ уд = υ 1 + υ 2 – скорость удаления
(знак «+» так как из условия понятно, что пешеходы движутся в разных направлениях
)
υ уд = 60 + 70 = 130 (км/ч)
(Пройденное расстояние находим по формуле)
S = υ уд ·t
⇒ t
= S: υ уд
t = 260: 130 = 2 (ч)
Ответ:
через 2 ч расстояние между ними будет 260 км.
2 способ
Сделаем пояснительный рисунок:
Из рисунка видно, что
1) через заданное время расстояние между поездами будет равно сумме расстояний, которые прошли каждый из поездов:
S = S 1 + S 2
;
2) каждый из поездов ехал одинаковое время (из условия задачи), значит,
S 1 =υ 1 · t
—расстояние которое проехал 1 поезд
S 2 =υ 2 · t
— расстояние которое проехал 2 поезд
Тогда,
S =
S 1 + S 2
= υ 1 · t + υ 2 · t = t · (υ 1 + υ 2)
= t · υ уд
t = S: (υ 1 + υ 2)
— время за которое оба поезда проедут 260 км
t = 260: (70 + 60) = 2 (ч)
Ответ:
расстояние между поездами будет 260 км через 2 ч.
1. Два пешехода одновременно вышли навстречу друг другу из двух пунктов, расстояние между которыми 18 км. Скорость одного из них 5 км/ч, другого – 4 км/ч. Через сколько часов они встретятся? (2 ч)
2. Два поезда отошли от одной станции в противоположных направлениях. Их скорости 10 км/ч и 20 км/ч. Через сколько часов расстояние между ними будет 60 км? (2 ч)
3. Из двух сел, расстояние между которыми 28 км, одновременно навстречу друг другу вышли два пешехода. Скорость первого 4 км/ч, скорость второго 5 км/ч. На сколько километров за час пешеходы сближаются друг с другом? Какое расстояние будет между ними через 3 часа? (9 км, 27 км)
4. Расстояние между двумя городами 900 км. Два поезда вышли из этих городов навстречу друг другу со скоростями 60 км/ч и 80 км/ч. На каком расстоянии друг от друга были поезда за 1 час до встречи? Есть ли в задаче лишнее условие? (140 км, есть)
5. Велосипедист и мотоциклист выехали одновременно из одного пункта в одном направлении. Скорость мотоциклиста 40 км/ч, а велосипедиста 12 км/ч. Какова скорость их удаления друг от друга? Через сколько часов расстояние между ними будет 56 км? (28 км/ч, 2 ч)
6. Из двух пунктов, удаленных друг от друга на 30 км, выехали одновременно в одном направлении два мотоциклиста. Скорость первого 40 км/ч, второго 50 км/ч. Через сколько часов второй догонит первого?
7. Расстояние между городами А и В 720 км. Из А в В вышел скорый поезд со скоростью 80 км/ч. Через 2 часа навстречу ему из В в А вышел пассажирский поезд со скоростью 60 км/ч. Через сколько часов они встретятся?
8. Из села вышел пешеход со скоростью 4 км/ч. Через 3 часа вслед за ним выехал велосипедист со скоростью 10 км/ч. За сколько часов велосипедист догонит пешехода?
9. Расстояние от города до села 45 км. Из села в город вышел пешеход со скоростью 5 км/ч. Через час навстречу ему из города в село выехал велосипедист со скоростью 15 км/ч. Кто из них в момент встречи будет ближе к селу?
10. Старинная задача.
Некий юноша пошел из Москвы к Вологде. Он проходил в день 40 верст. Через день вслед за ним был послан другой юноша, проходивший в день 45 верст. Через сколько дней второй догонит первого?
11. Старинная задача
. Собака усмотрела в 150 саженях зайца, который пробегает в 2 минуты по 500 сажен, а собака за 5 минут – 1300 сажен. Спрашивается, в какое время собака догонит зайца?
12. Старинная задача
. Из Москвы в Тверь вышли одновременно 2 поезда. Первый проходил в час 39 верст и прибыл в Тверь двумя часами раньше второго, который проходил в час 26 верст. Сколько верст от Москвы до Твери?
Пусть движение первого тела характеризуется величинами s 1 , v 1 , t 1 , а движение второго – s 2 , v 2 , t 2 . Такое движение можно представить на схематическом чертеже: v 1 , t 1 t встр. v 2 , t 2
Если два объекта начинают движение одновременно навстречу друг другу, то каждое из них с момента движения и до встречи затрачивает одинаковое время – время встречи , т.е. t 1= t 2= t встр.
Расстояние, на которое сближаются движущиеся объекты за единицу времени, называется скоростью сближения, т.е. v сбл.= v 1 +v 2 .
Расстояние между телами можно выразить так: s=s 1 +s 2 .
Все расстояние, пройденное движущимися телами при встречном движении, может быть рассчитано по формуле: s=v сбл. t встр. .
Пример . Решим задачу: «Два пешехода одновременно вышли навстречу друг другу из двух пунктов, расстояние межу которыми 18км. Скорость одного их них 5км/ч, другого – 4км/ч. Через сколько часов они встретятся?»
Решение: В задаче рассматривается движение на встречу двух пешеходов. Один идет со скоростью 5км/ч, другой – 4км/ч. Путь, который они должны пройти, 18км. Требуется найти время, через которое они встретятся, начав движение одновременно.
Участники движения | Скорость | Время | Расстояние |
Первый пешеход | 5км/ч | ?ч - одинаковое | 18 км |
Второй пешеход | 4км/ч |
Так как скорости пешеходов известны, можно найти их скорость сближения: 5+4=9(км/ч). Затем, зная скорость сближения и расстояние, которое им нужно пройти, можно найти время, через которое пешеходы встретятся: 189=2(ч).
Задачи на движение двух тел в одном направлении.
Среди таких задач различают два типа: 1) движение начинается одновременно из разных пунктов; 2) движение начинается в время из одного пункта.
Пусть движение первого тела характеризуется величинами s 1 , v 1 , t 1 , а движение второго – s 2 , v 2 , t 2 . Такое движение можно представить на схематическом чертеже:
v 1 , t 1 v 2 , t 2 t встр.
Если при движении в одном направлении первое тело догоняет второе, то v 1 v 2 , кроме того, за единицу времени первый объект приближается к другому на расстояние v 1 -v 2 . Это расстояние называют скоростью сближения : v сбл. =v 1 -v 2 .
Расстояние между телами можно выразить формулами: s= s 1 - s 2 и s= v сбл. t встр.
Пример . Решим задачу: «Из двух пунктов, удаленных друг от друга на расстояние 30км. Скорость одного 40км/ч, другого 50км/ч. Через сколько часов второй мотоциклист догонит первого?»
Решение: В задаче рассматривается движение двух мотоциклистов. Выехали они одновременно из разных пунктов, находящихся на расстоянии 30км.Скорость одного 40км/ч, другого 50км/ч. Требуется узнать, через сколько часов второй мотоциклист догонит первого.
Вспомогательные модели могут быть разными – схематический чертеж (см. выше) и таблица:
Зная скорость обоих мотоциклистов можно узнать их скорость сближения: 50-40=10(км/ч). Затем зная скорость сближения и расстояние между мотоциклистами найдем время, за которое второй мотоциклист догонит первого: 3010=3(ч).
Приведем пример задачи, в которой описывается вторая ситуация движения двух тел в одном направлении.
Пример . Решим задачу: «В 7ч из Москвы со скоростью 60км/ч вышел поезд. В 13ч следующего дня в том же направлении вылетел самолет со скоростью 780км/ч. Через какое время самолет догонит поезд?»
Решение: В задаче рассматривается движение поезда и самолета в одном направлении из одного пункта, но в разное время. Известно, что скорость поезда 60км/ч, скорость самолета – 780км/ч; время начала движения поезда 7ч, а самолета 13ч следующего дня. Требуется узнать, через какое время самолет догонит поезд.
Из условия задачи следует, что к моменту вылета самолета поезд прошел определенное расстояние. Если его найти, то данная задача становится аналогичной предыдущей задаче.
Что бы найти это расстояние нужно подсчитать, сколько времени находился в пути поезд: 24-7+13=30(ч). Зная скорость поезда и время, которое он был в пути до вылета самолеты, можно найти расстояние между поездом и самолетом: 6030=1800(км). Затем найдем скорость сближения поезда и самолета: 780-60=720(км/ч). И далее, время, через которое самолет догонит поезд: 1800720=2,5(ч).