powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пролог
3 сообщений из 3, страница 1 из 1
Пролог
    #38225058
fedorSmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пролог Д. Никак не разберусь,нужно загрузить набор грузов, заданный списком весов грузов в несколько одинаковых грузовиков.

gruz([],_,0,[]).
gruz([a|B],c,n,[a|D]):-НЕ(БОЛЬШЕ(a,c)),gruz(B,#c-a#,n,D).
gruz([_|B],c,n,D):-gruz(B,c,D).
gruz(B,c,n,D):-БОЛЬШЕ(n,0),gruz(B,20,#n-1#,D).
?gruz([1,3,6,5,2,3,4,7,9,13,17],20,4,V).

По строчкам: (после каждого действия переход к пункту 1)
1) если грузовиков=0 - косяк в данных
2) если грузы есть - вытаскиваем первый, если в грузовик вмещается - грузим, убавляем оставшуюся грузоподъемность
3) если не вмещается - пропускаем этот груз[тут косяк, не ясно как его пропустить не выкидывая из списка]
4) если еще остались грузовики, загружаем следующий из них, убавляя кол-во свободных и сбрасывая грузоподъемность
вызов([список масс грузов], грузоподъемность, количество грузовиков, %ответ%)

есть такой код еще, но просят задать грузовики тоже списком:
select(a,[a|B],B).
select(a,[b|C],[b|D]):-select(a,C,D).
gruz(A,B,C,D):-gruz1(A,B,B,C,D).

gruz1([],_,_,_,[]).
gruz1(L,c,f,n,[a|D]):-select(a,L,M),
ÍÅ(ÁÎËÜØÅ(a,c)),gruz1(M,#c-a#,f,n,D).
gruz1(L,_,f,n,["|"|D]):-ÁÎËÜØÅ(n,0),gruz1(L,f,f,#n-1#,D).

?gruz([17,13,9,7,4,3,2,5,3],20,4,V),!.
помогите разобраться с задачей пожалуйста,может что тут понаписал совсем не верно
...
Рейтинг: 0 / 0
Пролог
    #38225164
fedorSmt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S>По строчкам: (после каждого действия переход к пункту 1)
S>1) если грузовиков=0 — косяк в данных

Тут надо не пустой список возвращать, а делать отлуп:
gruz([],_,_,[]). % нет грузов - нет и грузовиков (потом расширим список грузовиков, если захотим)
gruz(_,0,_,_) :- !,fail. % есть грузы, но грузовики нулевой грузоподъёмности - отлуп
gruz(_,_,0,_) :- !,fail. % есть грузы, но нет грузовиков - отлуп

И ещё неплохо бы делать отлуп, если сумма грузов больше, чем количество * грузоподъёмность. Причём на каждом шаге.

S>2) если грузы есть — вытаскиваем первый, если в грузовик вмещается — грузим, убавляем оставшуюся грузоподъемность

Так нельзя: груз кладётся в один грузовик, а убавляется грузоподъёмность всех грузовиков.

S>3) если не вмещается — пропускаем этот груз[тут косяк, не ясно как его пропустить не выкидывая из списка]

Для этого придётся ввести ещё один предикат "загрузить один грузовик под завязку", возвращающий список оставшихся грузов.

S>4) если еще остались грузовики, загружаем следующий из них, убавляя кол-во свободных и сбрасывая грузоподъемность
S>вызов([список масс грузов], грузоподъемность, количество грузовиков, %ответ%)
S>Помоему не верно и грузовики вроде тоже списком надо задать.

Казалось бы, ответом является список списков — грузы, распределённые по грузовикам.

То есть, если в синтаксисе турбо-пролога,
predicates
fillTrucks(
real*, % weights
real, % max load
integer, % number of trucks
real** % weights in trucks
).
fillOneTruck(
real*, % source weights
real, % max load
real*, % weights in the truck
real* % weights left unloaded
).
как это все в синтаксисе пролога д сделать?
...
Рейтинг: 0 / 0
Пролог
    #38226412
Фотография AlexandrPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fedorSmt,

это задача о ранце что ли, но только ранцев много

на Прологе как учебная может проходить - можно поискать в интернете

а вообще
можно спросить на 'живых' в отношении Пролога форумах
http://www.cyberforum.ru/prolog/
http://www.hardforum.ru/t108626/
...

PS Здесь Пролог вне интересов, хотя по сути - вроде sql в отношении обработки данных. И СУБД есть, где
вместо sql - prolog. Например, DataLog. http://en.wikipedia.org/wiki/Datalog
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Пролог
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]