Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2012, 17:40
yameander yameander вне форума
Прохожий
 
Регистрация: 29.03.2012
Сообщения: 3
Репутация: 10
По умолчанию Проблема железнодорожного перегона - Delphi 2010

Доброго времени суток! Очень прошу помочь со следующей задачей:

Железная дорога, соединяющая два города А и В, включает участок, на котором имеется только единственный путь, см. схему.
Движение поездов на единственном пути подчиняется следующим ограничениям:
- на свободный единственный путь может войти поезд любого направления;
- пока на единственном пути находится поезд некоторого направления, на него не может войти поезд другого направления, но может войти поезд того же направления.

--->--------- ------>----

А ------>------<------- B

---<--------- ------<----

Требуется запрограммировать задачу для двух вариантов условий:
1) нет ограничений на количество поездов одного направления, находящихся на единственном пути;
2) ограничить количество поездов одного направления, находящихся на единственном направлении значением N и решить проблему "бесконечного ожидания", свойственную первому варианту, когда поезда одного направления, захватив единственный путь, не позволяют поездам другого направления пройти по этому пути. При этом необходимо реализовать рациональный порядок выделения единственного пути поездам обоих направлений.

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

Вот подробное описание задачи и почти решенная задача (все работает, кроме вышеуказанной проблемы):
Вложения
Тип файла: rar Поезда.rar (528.3 Кбайт, 10 просмотров)
Ответить с цитированием
  #2  
Старый 29.03.2012, 18:00
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

так а если их пускать по очереди
Ответить с цитированием
  #3  
Старый 29.03.2012, 18:04
yameander yameander вне форума
Прохожий
 
Регистрация: 29.03.2012
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pilot_Red
так а если их пускать по очереди

А как это сделать? Я не профи в программировании, буду очень благодарен, если поможете сделать хотя бы вариант с пуском по очереди.
Ответить с цитированием
  #4  
Старый 29.03.2012, 18:22
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от yameander
А как это сделать? Я не профи в программировании, буду очень благодарен, если поможете сделать хотя бы вариант с пуском по очереди.
Ну если это сделал, то с очередностью я думаю проблем не должно возникнуть. Я не стал вдаваться в подробности сей проги, но первое, что пришло мне в голову, так это семафор(регулировщик), который впускает или не впускает на этот участок дороги тот или иной состав. выбор зависит от того, свободен ли этот участок или нет, или же от приоритета поезда(если несколько поездов одновременно пытаются проехать через этот участок)
Так вот, если сделать у этого семафора свойство N, которое будет содержать значение 0 или 1, и менять его по следующему правилу:
если 2 поезда, с одинаковыми приоритетами претендуют на ресурс, то
если значение свойства N=1 то пропускаем поезд слева и меняем значение N на 0, если N=0 то пропускаем поезд справа и меняем значение N на 1.
Можно еще выделять время. например 15 мс. работает правая сторона, 15 левая
Ответить с цитированием
  #5  
Старый 29.03.2012, 18:30
yameander yameander вне форума
Прохожий
 
Регистрация: 29.03.2012
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pilot_Red
Ну если это сделал, то с очередностью я думаю проблем не должно возникнуть. Я не стал вдаваться в подробности сей проги, но первое, что пришло мне в голову, так это семафор(регулировщик), который впускает или не впускает на этот участок дороги тот или иной состав. выбор зависит от того, свободен ли этот участок или нет, или же от приоритета поезда(если несколько поездов одновременно пытаются проехать через этот участок)
Так вот, если сделать у этого семафора свойство N, которое будет содержать значение 0 или 1, и менять его по следующему правилу:
если 2 поезда, с одинаковыми приоритетами претендуют на ресурс, то
если значение свойства N=1 то пропускаем поезд слева и меняем значение N на 0, если N=0 то пропускаем поезд справа и меняем значение N на 1.
Можно еще выделять время. например 15 мс. работает правая сторона, 15 левая

Благодарю, хорошая идея, буду пробовать!
Ответить с цитированием
  #6  
Старый 29.03.2012, 18:33
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

Цитата:
Сообщение от yameander
Благодарю, хорошая идея, буду пробовать!
Не за что! Почитай еще про семафорный механизм в ОС, там может по-круче метод есть!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025