Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 12:43   #1
Ketty_byyy
 
Регистрация: 22.05.2010
Сообщений: 5
По умолчанию Задача планирования «в мире кубиков» Turbo prolog

Имеется 3 кубика, из которых составлены столбики – один или несколько. Максимальное число столбиков ограничено. На каждом шагу разрешается переставлять только один кубик. Кубик можно взять только тогда, когда его верхняя поверхность свободна. Кубик можно поставить либо на стол, либо на другой кубик.
Целевая ситуация – любая конфигурация кубиков, содержащая столбик, составленный из всех имеющихся кубиков в указанном порядке.
Задача состоит в выработке плана переупорядочивания кубиков.

Собственно задача решена, но у меня появилось маленькое затруднение.
Нужно сделать, чобы начальная последовательность кубиков задавалась с клавиатуры
Вот мой код
domains
str,str2=string
s=char
list,l=s*
l2=list*
l3=l2*
domains
str,str2=string
s=char
list,l=s*
l2=list*
l3=l2*
predicates
tgoal(l2)
delete(list,l2,l2)
member(l2,l3)
after(l2,l2)
solve(l2,l3)
in_depth(l3,l2,l3,l3,integer)
write_list(l3)
convert(string,list)
clauses
tgoal([['a','b','c'],[],[]]).
tgoal([[],['a','b','c'],[]]).
tgoal([[],[],['a','b','c']]).
convert("",[]).
convert(S1,[H|T]):-frontchar(S1,H,S2),convert(S2,T).
after(Stolbs,[Stolb1,[Up1|Stolb2]|Rest]):-
delete([Up1|Stolb1],Stolbs,Stolbs1), delete(Stolb2,Stolbs1,Rest).
delete(X,[X|L],L).
delete(X,[Y|L],[Y|L1]) :- delete(X,L,L1).
member(X,[X|_]).
member(X,[_|Tail]):- member(X,Tail).
solve(Node,Solution) :- in_depth([],Node,Solution,Sol,4).
in_depth(Path,Node,[Node|Path],[Node],_):- tgoal(Node).
in_depth(Path,Node,Solution,[Node|Sol],Maxdepth) :-
Maxdepth>0,
Maxd=Maxdepth-1,
after(Node,Node1), not(member(Node1,Path)),
in_depth([Node|Path],Node1,Solution,Sol,Maxd).
write_list([X|Rest]):- write("\n",X),readchar(_), write_list(Rest).
write_list([]).
goal
%write("Vvedeie nachalnoe znachenie"),nl,readln(Str),convert( Str,Llist),L=Llist,
write("Vvedeie konechnoe znachenie"),nl,readln(Str2),convert (Str2,Llist2),
solve([Llist2,[],[]],Solution), write_list(Solution).

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

Последний раз редактировалось Ketty_byyy; 14.11.2010 в 12:46.
Ketty_byyy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Turbo prolog ТриСемёрки Помощь студентам 1 03.11.2010 13:36
Удаление из списка. Turbo Prolog Ketty_byyy Помощь студентам 1 23.05.2010 15:19
Turbo Prolog L11L Помощь студентам 0 22.04.2010 11:17
Дополнить программу в Turbo Prolog Paco de lucia Помощь студентам 0 08.03.2010 19:59
Удалить вершину с указанной меткой. Задача Turbo Prolog. Iridda Помощь студентам 1 24.01.2009 19:33