asyaevloeva
@asyaevloeva

Как отсортировать значения по возрастанию и просуммировать их?

У меня задача:
Написать программу, выводящую значения находящиеся в вершинах заданной высоты, сортирующую их по возрастанию и подсчитывающую сумму этих значений.

У меня кое-как выводятся значения, находящиеся в вершинах заданной высоты, а вот отсортировать и просуммировать их не получается. Подскажите как это сделать!

Вот что у меня есть сейчас:


DOMAINS

tr=empty; tree(integer,tr,tr); end
number = integer
list = number *
PREDICATES
nondeterm tree_height (tr, integer)
max(integer,integer,integer)

minus(integer,integer)

insert_sort(list,list)
insert(number,list,list)
asc_order(number,number)

nondeterm p(tr,integer,integer)

CLAUSES
max(M,N,N) :- N>=M, !.
max(M,N,M) :- M>=N, !.

tree_height(empty, 0).
tree_height(tree(_,L,R),D) :- tree_height(L,D1),
tree_height(R,D2),
max(D1,D2,M_D),
D=M_D+1.
minus(D,K) :- K=D-1.

p(tree(V,_,_),0,V):- !.
p(tree(_,L,_),Level,X):- Level1 = Level-1, p(L,Level1,X).
p(tree(_,_,R),Level,X):- Level1 = Level-1, p(R,Level1,X).

insert_sort([],[]).
insert_sort([X|Tail],Sorted_list) :- insert_sort(Tail,Sorted_Tail), insert(X,Sorted_Tail,Sorted_list).

insert(X,[Y|Sorted_list],[Y|Sorted_list1]) :- asc_order(X,Y), !, insert(X,Sorted_list,Sorted_list1).

insert(X,Sorted_list,[X|Sorted_list]).
asc_order(X,Y) :- X>Y. %po vosrastaniu

goal

tree_height(tree(2,
tree(4,empty,
tree(5,empty,
tree(2,empty,
tree(9,empty,empty)))),
tree(7,
tree(1,empty,empty),
empty)),X),
minus(X,K),
p(tree(6,
tree(3,empty,
tree(4,empty,
tree(9,empty,
tree(7,empty,
tree(8,empty,empty))))),

tree(8,empty,
tree(5,empty,
tree(1,
tree(8,empty,empty),
tree(5,empty,
tree(5,empty,empty)))))),
K,V),


insert_sort([V],S),
D=V+V.
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы