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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2011, 09:06   #1
lilian
 
Регистрация: 06.10.2011
Сообщений: 5
По умолчанию Пролог - Дерево.

Здравствуйте, помогите с задачкой кто чем может: определить длину (число ветвей) пути от корня дерева до ближайшей вершины с заданным значением, если такая вершина отсутствует, ответ- "-1". Заранее благодарна.
lilian вне форума Ответить с цитированием
Старый 06.10.2011, 13:26   #2
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
По умолчанию

Вот думаю то, что имелось ввиду.
Код:
domains
	list=integer*.
	tree=der(tree,integer,tree);
	nil.	
predicates
        inside(integer,tree,list).
  	add(list).
  	derevo(list,tree,integer,list).
 	create_kor_der(list,tree).
  	konk(list,list,list).
  	dobav(tree,integer,tree).
  	del(list,list).
  	count(list,integer,integer).        
clauses
  	add([H|T]):-readint(H),H<>0,add(T),!.
 	add([]).
 	del([_|T],T).
  	konk([],L,L).
  	konk([X|L1],L2,[X|L3]):-konk(L1,L2,L3).
	dobav(nil,X,der(nil,X,nil)).
  	dobav(der(L,X,R),X,der(L,X,R)).
  	dobav(der(L,Kor,R),X,der(L1,Kor,R)):-
  		Kor>=X,
  		dobav(L,X,L1).
  	dobav(der(L,Kor,R),X,der(L,Kor,R1)):-
  		X>Kor,
  		dobav(R,X,R1).
 	create_kor_der([H1|_],T1):-
  		dobav(nil,H1,T1).
  	inside(X,der(_,X,_),[X]).
  	inside(X,der(L,Kor,_),[Kor|Put]):-
  		Kor>X,
  		inside(X,L,Put).
  	inside(X,der(_,Kor,R),[Kor|Put]):-
  		X>Kor,
  		inside(X,R,Put).  		
  	count([_|T],N,NN):-N1=N+1,count(T,N1,NN).
  	count([],N,N).	
 	derevo([H1|T1],Tr,E,Spisok):-
 		H1=0,
 		inside(E,Tr,Spisok);
 		H1<>0,
  		dobav(Tr,H1,Tr1),
  		derevo(T1,Tr1,E,Spisok).
goal
 	clearwindow,  
	write("Enter Tree:\n"),
	add(L),
	write(L),nl,
	konk(L,[0],L1),   
	create_kor_der(L1,T),    
	del(L1,L2),
	write("Enter Element:\n"),
	readint(E),
	derevo(L2,T,E,Spi),
	N=-1,
	count(Spi,N,NN),
	write("dlina min puti = ",NN);
	write("element ne naiden!").
Исходники программ - http:\\www.kort.3dn.ru

Последний раз редактировалось KORT; 06.10.2011 в 13:34.
KORT вне форума Ответить с цитированием
Старый 08.10.2011, 12:39   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
domains
        treetype=tree(integer,treetype,treetype);empty()
predicates
        space(integer)
        output(treetype,integer)
		p( treetype, integer, integer, integer )
		min( integer, integer, integer )
		
goal
    LT0 = tree(7,tree(8,empty, empty),tree(9,tree(10,empty, empty),
        tree(11,tree( 12, empty,tree(13, empty,empty)),empty))),
	output( LT0, 0 ),nl,
	write( "value: " ), readint( N ),
	p( LT0, N, R, 0 ),
	nl, write( "result: ", R ).
	
clauses
	min( A, B, R ) :-
		A < 0, R = B;
		B < 0, R = A;
		A < B, R = A;
		R = B.
	p( empty, _, -1, _ ).
	p( tree(A, _, _ ), A, H, H ).
	p( tree(_,L,R), X, Result, H ) :-
		HH = H + 1,
		p( L, X, RL, HH ),
		p( R, X, RR, HH ),
		min( RL, RR, Result ).
	
        space(0):-!.
        space(N):-
                write("   "),
                N1=N-1,
                space(N1).
 
        output(empty,_).
        output(tree(A,L,R),N):-
                N1=N+1,
                output(L,N1),
                space(N),
                write(A),nl,
                output(R,N1).
rrrFer вне форума Ответить с цитированием
Старый 13.10.2011, 19:03   #4
lilian
 
Регистрация: 06.10.2011
Сообщений: 5
По умолчанию

Ребят большое спасибо за задачки. Вопрос Kort'у можно переделать вашу задачку? Не вводить вершины с клавиатуры, а чтобы они уже были введены непосредственно в коде 6-7 вершин.(а-то преподавателю слишком много по коду объяснять придется)
Заранее спасибо.
lilian вне форума Ответить с цитированием
Старый 13.10.2011, 19:37   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Не вводить вершины с клавиатуры, а чтобы они уже были введены непосредственно в коде 6-7 вершин
ну а чем мой-то код тогда не устраивает? как раз вот тут записано дерево с 7 вершинами:
Код:
 LT0 = tree(7,tree(8,empty, empty),tree(9,tree(10,empty, empty),
        tree(11,tree( 12, empty,tree(13, empty,empty)),empty)))
ну а дальше все очень просто
предикаты space и output можно удалить если выводить дерево на экран ненадо.
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пролог slipokorn Помощь студентам 0 10.05.2011 03:02
Пролог slipokorn Помощь студентам 0 08.05.2011 14:42
ПРОЛОГ Иринкаа Помощь студентам 7 09.12.2009 02:17
Пролог Dog Помощь студентам 0 29.11.2009 14:58
Пролог 301 Помощь студентам 2 01.04.2008 16:26