Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа Транспортный советник, Нужна помощь в SWI Prolog'e 
V
    Опции темы
ILYA609
Дата 27.10.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



Условие: 
Некоторая железнодорожная компания обслуживает n станций S1,S2,...,Sn. Она предлагает улучшить информационное обслуживание клиентов с помощью информаци-онных терминалов, управляемых вычислительной машиной. Клиент набирает название своей станции направления Sa и станции назначения Sd, и ему должна выдаваться схема расписаний поездов с необходимыми пересадками и с минимальным общим временем по-ездки.
Разработайте программу для вычисления нужной информации. Пусть расписание (представляющее собой ваш банк данных) изображено соответствующей структурой дан-ных, содержащей время отправления и прибытия всех имеющихся поездов. Разумеется, не все станции связаны непрерывными линиями.

Код

run:-
    consult('schedule.pl'),
    short_path(X,Y,Path,Length,TimeO,TimeP),
    nl,write('Оптимальный маршрут: '),
    nl,write('Время в пути: '),
    write(Length),
    write(' часов'),nl,
    printPath(Path,TimeO,TimeP),nl.

short_path(X,Y,Path,Length,TimeOtpr,TimePrb):-
    path(X,Y,[X],Path,0,Length,['end'],TimeOtpr,['end'],TimePrb),
    not(shorter(X,Y,Length)).

path(Y,Y,Path,Path,Length,Length,TimeOtpr,TimeOtpr,TimePrb,TimePrb):- !.

path(X,Y,Path0,Path,Len0,Length,TimeOtpr0,TimeOtpr,TimePrb0,TimePrb):-
        way(X,Z,VO,VP),
        not(member(Z,Path0)),
    Len1 is Len0+(VP-VO),    
    path(Z,Y,[Z|Path0],Path,Len1,Length,[VO|TimeOtpr0],TimeOtpr,[VP|TimePrb0],TimePrb).

shorter(X,Y,Length):-    
    path(X,Y,[X],_,0,Len,[],_,[],_),
        Len<Length,
        !.


У меня есть файл с моим графом 'schedule.pl',
в котором граф описан, как way(СтанцияА, СтанцияБ, ВремяОтправления, ВремяПрибытия),
теперь у меня проблема надо сделать проверку, чтобы время отправлния от следующей станции было больше чем время прибытия
на эту станцию, т.e. VO надо сравнить с предыдущим VP, не знаю как эту проверку всунуть сюда!:(

Может кто поможе?!
PM MAIL   Вверх
Фантом
Дата 27.10.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 6
Всего: 49



Если я правильно понял, то при каждом очередном вызове предиката path в предпоследнем аргументе сидит список времен прибытий (естественно, развернутый задом наперед)? Если да, то во вторую ветку предиката надо вставить условие (например, после not(member(Z,Path0)),):
Код

...,TimePrb0=[PredPrb|_],PredPrb<VO,...

 
При этом, правда, придется сделать еще одну поправку: перед наиболее общим вариантом предусмотреть упрощенный, для которого список времен прибытий пуст (т.е. случай, когда мы начинаем с первой станции). Можно, правда, обойти ту же проблему и другим путем - при самом первом вызове path принудительно занести в список времен прибытий какое-то время, заведомо меньшее любого другого, тогда дополнительная альтернатива предиката path не потребуется.

P.S. А вообще, конечно, в коде полезно писать комментарии. Чтобы проще было разбираться.  smile 

Это сообщение отредактировал(а) Фантом - 27.10.2009, 22:34
PM   Вверх
ILYA609
Дата 28.10.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



Спасибо большое, оказываеться все так просто было!smile)) smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.