Форум программистов, компьютерный форум, киберфорум
Наши страницы
Prolog
Войти
Регистрация
Восстановить пароль
 
rrrFer
Заблокирован
1

Дерево. Список деревьев. Глубина дерева [turbo Prolog] [есть решение]

03.06.2011, 20:53. Просмотров 2125. Ответов 0
Метки нет (Все метки)

Имеется список, элементы которого – непустые бинарные деревья.
Для каждого элемента списка найти глубину дерева, из полученных результатов сформировать список (без использования стандартного предиката findall).

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
domains
        treetype = tree(integer, treetype, treetype); empty
        tlist = treetype*
    ilist = integer *
predicates
    space( integer )            %вывод пробелов
    output( treetype, integer )    %вывод дерева (корень слева, 
                                %листья справа)
    output( tlist )                %вывод списка деревьев
    max( integer, integer, integer )
                                %определение наибольшего из 2х чисел
    theight( treetype, integer )%определение глубины дерева
    height( tlist, ilist )        %формирование списка глубин деревьев
    firstN( ilist, ilist, integer)
                                % получаем первых N элементов
    cycle_shift( ilist, ilist, ilist, integer, integer )
                                %тут сдвиг на N - V%N, где V - сдвиг, 
                                %N - длина списка
    getLenList( ilist, integer )    %определение длины списка
goal
    LT1 = tree(1,empty,empty),    %дерево с глуюиной 1
    LT2 = tree(2,tree(3,empty,empty),empty),
                                %2
    LT3 = tree(4,empty,tree(5,tree(6,empty,empty),empty)),
                                %3
    LT4 = tree    (7,    tree(8,empty, empty), 
                    tree(9,
                        tree(10,empty, empty),
                        tree(11, 
                            tree( 12, empty,
                                tree(13, empty,empty)
                            ),
                            empty
                        )
                    )
                ),
    LT = [ LT1, LT2, LT3, LT4 ],    %список из 3 деревьев
    
    output( LT ),nl,
    
    height( LT, LI ),
    
    write( LI ),nl,
    
    write("\n==================\n"),nl,
    write("write N shift: "),
    readint(V),
    getLenList( LI ,N ),
    Shift = N - V mod N,
    
    cycle_shift( LI, LI, R, Shift, Shift ),
    
    write( R ), nl.
    
clauses
 
    getLenList( [], 0 ).
        getLenList( [ _ | L ], N ):-
            getLenList( L, N1 ),
            N = N1 + 1.
 
    firstN( [], [], _).
    firstN( _, [], 0).
    firstN( [H|T], [H|L], N):-
        NN = N - 1,
        firstN( T, L, NN). 
        
    cycle_shift( [], L, R, _, N):-
        firstN( L, R, N ),!.
    cycle_shift( [H|T1], LT, [H | R], 0, NT) :-
        cycle_shift( T1, LT, R, 0, NT).
    cycle_shift( [_|T1], LT, R, N, NT) :-
        NN = N - 1,
        cycle_shift( T1, LT, R, NN, NT).
        
    height( [], [] ).
    height( [HT|TT], [HL|TL] ):-
        theight( HT, HL ),
        height( TT, TL ).
 
    max( A, B, A ) :-
        A >= B.
    max( _, B, B ).
    
    theight( empty, 0 ).
    theight( tree( _, L, R ), TH):-
        theight( L, LH ),
        theight( R, RH ),
        max( LH, RH, LTH ),
        TH = LTH + 1.
 
    output( [] ).
    output( [H|T] ):-
        output(H,0),
        write("\n-----------------\n"),
        output( T ).
    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).
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 20:53
Ответы с готовыми решениями:

Списки, поэлементый ввод списка, минимум [есть решение] [Turbo Prolog]
Привет! К сожалению, никогда не сталкивался с Prolog, но случилось удивительное: на...

Дана строка. Вывести на экран слова, внутри которых имеется хотя бы одна буква, с которой слово начинается. [Turbo prolog][есть решение]
predicates ...

В Turbo-Prolog есть возможность описать Goal. Как это реализовано в SWI-Prolog
Здравствуйте. в Turbo-Prolog есть возможность описать Goal: Goal father(X,_), write(X). И...

Генеологическое дерево на Turbo Prolog
Составить программу, содержит факты взаимосвязей соседних поколений (с предикатами "мать" и...

Генеалогическое дерево [Turbo Prolog]
вот код программы. Нужно чтобы программа по запросу выводила кто кому есть кто но у меня уже на...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 20:53

Вычисления глубины бинарного дерева в Turbo Prolog
Написать программу для вычисления глубины бинарного дерева (глубина пустого дерева равна 0, глубина...

Поиск минимума среди листьев дерева [Решено] [Turbo Prolog]
domains treetype=tree(integer,treetype,treetype);empty() predicates print_tree(treetype)...

Как записать это решение в Turbo Prolog?
1:bis(,). 2:bis(,):-Hh is H/2,bis(T,Tt).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru