Найти количество узлов дерева, значения которых кратны 5 - Prolog

Узнай цену своей работы

Формулировка задачи:

Работаю в SWI-Prolog. Полностью задача звучит так: Создать бинарное дерево и вывести. Найти количество узлов дерева, значения которых кратны 5. Само дерево я создали и вывел его, а вот с подсчётом проблема. Не могу организовать счётчик. Вот код:
Листинг программы
  1. /* tree_generation*/
  2. tree_insert(X,empty,tr(X,empty,empty)).
  3. tree_insert(X,tr(X,L,R),tr(X,L,R)):-!.
  4. tree_insert(X,tr(K,L,R),tr(K,L1,R)):- X < K, !, tree_insert(X,L,L1).
  5. tree_insert(X,tr(K,L,R),tr(K,L,R1)):- tree_insert(X,R,R1).
  6. tree_gen(0,empty):-!.
  7. tree_gen(N,T):-X is random(100), N1 is N-1, tree_gen(N1,T1), tree_insert(X,T1,T).
  8. /*tree_printing*/
  9. print2(empty,_).
  10. print2(tr(X,L,R),H):- H1 is H + 10, print2(R,H1), tab(H), write(X), nl, print2(L,H1).
  11. tree_print(T) :- print2(T,0).
  12.  
  13. /*tree_mul5*/
  14. foo(empty, 0).
  15. foo(tr(H, L, R), C) :- foo(L, _), foo(R, _), count(H,C), write('H = '), write(H), nl, write('C = '), write(C), nl.
  16. 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 и чему оно равно?*/
  17.  
  18. /*main*/
  19. go :- tree_gen(15,T), tree_print(T), nl, write('Count = '), foo(T, Count), write(Count).
Результат вывода дерева:
Листинг программы
  1. 97
  2. 85
  3. 82
  4. 78
  5. 74
  6. 72
  7. 55
  8. 50
  9. 38
  10. 35
  11. 32
  12. 26
  13. 21
  14. 15
  15. 0

Решение задачи: «Найти количество узлов дерева, значения которых кратны 5»

textual
Листинг программы
  1. count(H,0):- H =:= 0,!.

Объяснение кода листинга программы

  1. Условие count(H,0):- H =:= 0,!. означает, что если значение H равно 0, то прекратить выполнение программы.
  2. Переменная H используется для хранения значения, которое проверяется на равенство 0.
  3. Значение 0 используется как начальное значение для переменной H.
  4. Программа прекращает выполнение, если значение H равно 0.
  5. Если значение H не равно 0, то программа продолжает выполнение.
  6. Переменная H обновляется новым значением, которое будет использоваться в следующей рекурсивной операции.
  7. Рекурсивная операция count(H,0) вызывается с обновленным значением H.
  8. Значение H увеличивается на 1.
  9. Если значение H не кратно 5, то программа продолжает выполнение.
  10. Если значение H кратно 5, то программа увеличивает счетчик на 1.
  11. Если значение H не равно 0, то программа продолжает выполнение.
  12. Если значение H равно 0, то программа прекращает выполнение.
  13. Значение H обновляется новым значением, которое будет использоваться в следующей рекурсивной операции.
  14. Рекурсивная операция count(H,0) вызывается с обновленным значением H.
  15. Значение H увеличивается на 1.
  16. Если значение H не кратно 5, то программа продолжает выполнение.
  17. Если значение H кратно 5, то программа увеличивает счетчик на 1.
  18. Если значение H не равно 0, то программа продолжает выполнение.
  19. Если значение H равно 0, то программа прекращает выполнение.
  20. Значение H обновляется новым значением, которое будет использоваться в следующей рекурсивной операции.
  21. Рекурсивная операция count(H,0) вызывается с обновленным значением H.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы