|
|
|
Пролог
|
|||
|---|---|---|---|
|
#18+
Пролог Д. Никак не разберусь,нужно загрузить набор грузов, заданный списком весов грузов в несколько одинаковых грузовиков. 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),!. помогите разобраться с задачей пожалуйста,может что тут понаписал совсем не верно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 19:21 |
|
||
|
Пролог
|
|||
|---|---|---|---|
|
#18+
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 ). как это все в синтаксисе пролога д сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2013, 22:56 |
|
||
|
Пролог
|
|||
|---|---|---|---|
|
#18+
fedorSmt, это задача о ранце что ли, но только ранцев много на Прологе как учебная может проходить - можно поискать в интернете а вообще можно спросить на 'живых' в отношении Пролога форумах http://www.cyberforum.ru/prolog/ http://www.hardforum.ru/t108626/ ... PS Здесь Пролог вне интересов, хотя по сути - вроде sql в отношении обработки данных. И СУБД есть, где вместо sql - prolog. Например, DataLog. http://en.wikipedia.org/wiki/Datalog ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2013, 17:39 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=57&tid=1341848]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
200ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 527ms |

| 0 / 0 |
