Найти количество узлов дерева, значения которых кратны 5 - Prolog
Формулировка задачи:
Работаю в SWI-Prolog.
Полностью задача звучит так:
Создать бинарное дерево и вывести. Найти количество узлов дерева, значения которых кратны 5.
Само дерево я создали и вывел его, а вот с подсчётом проблема.
Не могу организовать счётчик.
Вот код:
Результат вывода дерева:
Листинг программы
- /* tree_generation*/
- tree_insert(X,empty,tr(X,empty,empty)).
- tree_insert(X,tr(X,L,R),tr(X,L,R)):-!.
- tree_insert(X,tr(K,L,R),tr(K,L1,R)):- X < K, !, tree_insert(X,L,L1).
- tree_insert(X,tr(K,L,R),tr(K,L,R1)):- tree_insert(X,R,R1).
- tree_gen(0,empty):-!.
- tree_gen(N,T):-X is random(100), N1 is N-1, tree_gen(N1,T1), tree_insert(X,T1,T).
- /*tree_printing*/
- print2(empty,_).
- print2(tr(X,L,R),H):- H1 is H + 10, print2(R,H1), tab(H), write(X), nl, print2(L,H1).
- tree_print(T) :- print2(T,0).
- /*tree_mul5*/
- foo(empty, 0).
- foo(tr(H, L, R), C) :- foo(L, _), foo(R, _), count(H,C), write('H = '), write(H), nl, write('C = '), write(C), nl.
- count(H, C) :- REST is H mod 5, REST =:= 0, C is C + 1. /*Делю значение вершины Н на 5. Проверяю остаток от деления REST на равенство с 0 и, по хорошему должен увеличивать счётчик С, но C is C + 1 выдаёт логический результат. Если же C is C1 + 1 , то будет +, но откуда мне взять С1 и чему оно равно?*/
- /*main*/
- go :- tree_gen(15,T), tree_print(T), nl, write('Count = '), foo(T, Count), write(Count).
Листинг программы
- 97
- 85
- 82
- 78
- 74
- 72
- 55
- 50
- 38
- 35
- 32
- 26
- 21
- 15
- 0
Решение задачи: «Найти количество узлов дерева, значения которых кратны 5»
textual
Листинг программы
- count(H,0):- H =:= 0,!.
Объяснение кода листинга программы
- Условие count(H,0):- H =:= 0,!. означает, что если значение H равно 0, то прекратить выполнение программы.
- Переменная H используется для хранения значения, которое проверяется на равенство 0.
- Значение 0 используется как начальное значение для переменной H.
- Программа прекращает выполнение, если значение H равно 0.
- Если значение H не равно 0, то программа продолжает выполнение.
- Переменная H обновляется новым значением, которое будет использоваться в следующей рекурсивной операции.
- Рекурсивная операция count(H,0) вызывается с обновленным значением H.
- Значение H увеличивается на 1.
- Если значение H не кратно 5, то программа продолжает выполнение.
- Если значение H кратно 5, то программа увеличивает счетчик на 1.
- Если значение H не равно 0, то программа продолжает выполнение.
- Если значение H равно 0, то программа прекращает выполнение.
- Значение H обновляется новым значением, которое будет использоваться в следующей рекурсивной операции.
- Рекурсивная операция count(H,0) вызывается с обновленным значением H.
- Значение H увеличивается на 1.
- Если значение H не кратно 5, то программа продолжает выполнение.
- Если значение H кратно 5, то программа увеличивает счетчик на 1.
- Если значение H не равно 0, то программа продолжает выполнение.
- Если значение H равно 0, то программа прекращает выполнение.
- Значение H обновляется новым значением, которое будет использоваться в следующей рекурсивной операции.
- Рекурсивная операция count(H,0) вызывается с обновленным значением H.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д