Russian Qt Forum
Ноябрь 22, 2024, 22:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Симпатичная задачка  (Прочитано 10502 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Февраль 24, 2016, 13:35 »

Добрый день

Между пунктами A и B есть путь - рельсы по которым поезда могут ходить только в одну сторону. Т.е. напр 10 (или сколько угодно) поездов могут одновременно ехать из A в B, но движение в противоположную сторону может начаться только когда все они прибудут в B и путь освободится.

Нужно написать симулятор такого движения поездов, учитывая при этом что какое-то время возможна перегрузка. Напр новые и новые поезда прибывают в A извне и теперь все время едут в B, путь занят и поезда из В в A придется ждать хз сколько долго. Эта ситуация должна разруливаться, как - Ваше дело

[off]
Не, наверное сложновато для детей ассыстентского подземелья... Ну посмотрим..
[/off]
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #1 : Февраль 24, 2016, 14:36 »

Решение тривиальное: если на пути нет встречного поезда, то поезд может выезжать из своего пункта. Если поезда прибывают в А извне и все время едут в В, то и пускай едут. А поезда в В пускай стоят, судьба у них такая. Это если исходить из текущей постановки задачи. И не понятно, какую тут ситуацию разруливать нужно. Но подозреваю, что скоро подтянутся дополнительные требования, типа обеспечить равномерное движение поездов, не допускать застаивания поездов в В и т.п.
Записан

Пока сам не сделаешь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Февраль 24, 2016, 14:43 »

звучит как стандартная задача СМО
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #3 : Февраль 24, 2016, 15:29 »

а почему на такой оживленной линии только одни рельсы ? )
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Февраль 24, 2016, 17:09 »

do{

while (!railway.isEmpty())
{
  B.trains.wait();
  A.trains.go();
}

B.trains.go();

while (!railway.isEmpty())
{
  A.trains.wait();
  B.trains.go();
}

} while (!raiway.isExploded());

Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Февраль 24, 2016, 17:18 »

Здесь смысл как раз в том, что бы разрулить непрерывный поток поездов из одной точки в другую. Через какое то время нужно приостановить этот поток, дождаться его завершения и запустить реверсное движение.
Записан
Bepec
Гость
« Ответ #6 : Февраль 24, 2016, 17:50 »

Если так посудить, то накапливание и последующий коллапс неостановим Улыбающийся Ибо пропускная способность будет ниже нужной Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Февраль 24, 2016, 19:07 »

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

Дополнительно, если движение из А в В не закончилось, и в В еще не собралось ни одного поезда (чтоб ехать из В в А), то это время нужно будет продлить (чтоб путь зря не простаивал).

Либо же забить на время и, как только появился поезд на ожидании в пункте назначения (В), прекращать движение из А в В, а как только все поезда приедут, пускать движение из В в А. И теперь ждать, пока не появится поезда в А. И т.д.
« Последнее редактирование: Февраль 24, 2016, 19:10 от Racheengel » Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #8 : Февраль 24, 2016, 19:25 »

Это уже домыслы пошли, про время, очереди, переполнения и так далее Улыбающийся. А если в пункт А/В прибудет литерный поезд, и надо его по пути вне очереди пропустить? Подмигивающий А если диверсанты рельсы подорвали, и надо ремонтную бригаду отправлять? К исходной постановке задачи теперь много всего интересного додумать можно Улыбающийся.
Записан

Пока сам не сделаешь...
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #9 : Февраль 24, 2016, 19:49 »

А если в пункт А/В прибудет литерный поезд, и надо его по пути вне очереди пропустить? Подмигивающий

Литерный - это с синей мигалкой? Улыбающийся Будет стоять, пока дорога не освободится. А то ишь, без очереди как всем хочется Улыбающийся

А если диверсанты рельсы подорвали, и надо ремонтную бригаду отправлять?

А это я уже предусмотрел Улыбающийся

while (!raiway.isExploded());
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Февраль 25, 2016, 04:53 »

Ну давайте начнем писать симулятор
Код
C++ (Qt)
void MyThread::run( void )
{
 while (true) {
   int direction = (qrand() % 2) ? 0 : 1;   // напр-е движения: поезд из A в B или наоборот
   RunTrain(direction);
   QThread::msleep(qrand() % 100);   // случайная задержка, потом новый поезд
 }
}
И запускаем напр 50 таких ниток. И вот они должны ходить и не пересекаться. Можно заводить любые переменные и примитивы синхронизации. Ну вот, осталось только написать RunTrain Улыбающийся

Решение тривиальное: если на пути нет встречного поезда, то поезд может выезжать из своего пункта. Если поезда прибывают в А извне и все время едут в В, то и пускай едут. А поезда в В пускай стоят, судьба у них такая. Это если исходить из текущей постановки задачи.
Ну если "тривиальное" - милости просим с реализацией Улыбающийся
И не понятно, какую тут ситуацию разруливать нужно.
Вот эту самую
учитывая при этом что какое-то время возможна перегрузка. Напр новые и новые поезда прибывают в A извне и теперь все время едут в B, путь занят и поезда из В в A придется ждать хз сколько долго.
Здесь смысл как раз в том, что бы разрулить непрерывный поток поездов из одной точки в другую. Через какое то время нужно приостановить этот поток, дождаться его завершения и запустить реверсное движение.
Да, совершенно верно. Только точнее "в какой-то момент" или "при каких-то условиях". Через какое-то время можно понять как "раз в час"
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Февраль 26, 2016, 07:12 »

Ну вот, я так и знал - пошумели маленько, и тишина... Готовых классов нет - и сразу приплыли  Улыбающийся

Ладно, чуть копнем. На первый взгляд может показаться что "если поезда прибывают чаще чем успевают пройти" - то через некоторое время крах системы неизбежен, не хватает пропускной способности. В действительности это не так - ведь N поездов (в одном напр-и) проходят за то же время что и один.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #12 : Февраль 26, 2016, 13:01 »

Как же ты заебал с "готовыми классами"
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Февраль 26, 2016, 13:24 »

Как же ты заебал с "готовыми классами"
Не мешайте человеку тешить свое самолюбие. Он для этого такие темы и создает - "по-финдреплейсить". Улыбающийся

Вы ему лучше предложите сделать что-то посложней (хотя-бы со строками поработать без QString) - спесь (как и человек) тут-же исчезнут из темы. Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #14 : Февраль 26, 2016, 13:33 »

Не мешайте человеку тешить свое самолюбие. Он для этого такие темы и создает - "по-финдреплейсить". Улыбающийся

Вы ему лучше предложите сделать что-то посложней (хотя-бы со строками поработать без QString) - спесь (как и человек) тут-же исчезнут из темы. Улыбающийся

К сожалению, мне не платят за придумывание псевдоакадемических задачек:) А те, что решаются с "готовыми классами" по работе плохо абстрагируются для форума.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.