Найти среднее геометрическое положительных вершин дерева - Prolog

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

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

Найти среднее геометрическое положительных вершин дерева.

Решение задачи: «Найти среднее геометрическое положительных вершин дерева»

textual
Листинг программы
  1. domains
  2. treetype = tree(real, treetype, treetype); empty
  3.  
  4. predicates
  5. counter_p(treetype,real)
  6. sum_p(treetype,real)
  7. avg_p(treetype,real)
  8. pow(real,real,real)
  9.  
  10. clauses
  11.  
  12. pow(X,N,Z):- Z=exp(N*ln(X)).
  13.  
  14. counter_p(empty,0.0).
  15. counter_p(tree(V,L,R),N) :- V<=0, counter_p(L,LP), counter_p(R,RP), N=LP+RP.
  16. counter_p(tree(V,L,R),N) :- V>0, counter_p(L,LP), counter_p(R,RP), N=LP+RP+1.
  17.  
  18. sum_p(empty,0.0).
  19. sum_p(tree(V,L,R),N) :- V<=0, sum_p(L,LP), sum_p(R,RP), N=LP+RP.
  20. sum_p(tree(V,L,R),N) :- V>0, sum_p(L,LP), sum_p(R,RP), N=LP+RP+V.
  21.  
  22. avg_p(T,V) :- counter_p(T,N), sum_p(T,S), N > 0, N1=1/N, pow(S,N1,V).
  23. avg_p(T,0) :- counter_p(T,N), abs(N)<1, write("No positive nodes!"),nl.
  24.  
  25. goal
  26. avg_p(tree(-6,tree(7,empty,empty),tree(8,empty,tree(-1,empty,empty))),Z),write(Z),nl.

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

В этом коде используется язык программирования Prolog. Вот список описаний переменных и действий, которые происходят в коде:

  1. domains: Определяет типы данных для переменных в программе. В данном случае, treetype является типом данных для представления дерева, а real - для чисел с плавающей точкой.
  2. predicates: Определяет функции, которые могут быть проверены на истинность или ложность. В данном случае, counter_p, sum_p и avg_p - это функции, которые подсчитывают количество, сумму и среднее значение положительных узлов дерева соответственно. Функция pow используется для вычисления числа в степени.
  3. clauses: Определяет правила, когда функции истинны или ложны. В данном случае, правила для функций counter_p и sum_p основаны на том, является ли значение узла отрицательным или положительным.
  4. pow(X,N,Z):- Z=exp(N*ln(X)).: Это правило определяет, как вычислить число в степени. Здесь exp и ln - это встроенные функции, которые вычисляют экспоненту и логарифм соответственно.
  5. counter_p(empty,0.0).: Это правило устанавливает начальное значение счетчика для пустого дерева равным 0.
  6. counter_p(tree(V,L,R),N) :- V<=0, counter_p(L,LP), counter_p(R,RP), N=LP+RP.: Это правило говорит, что если значение узла отрицательное, то значение счетчика равно сумме значений счетчиков левого и правого поддеревьев.
  7. counter_p(tree(V,L,R),N) :- V>0, counter_p(L,LP), counter_p(R,RP), N=LP+RP+1.: Это правило говорит, что если значение узла положительное, то значение счетчика равно сумме значений счетчиков левого и правого поддеревьев, увеличенной на 1.
  8. sum_p(empty,0.0).: Это правило устанавливает начальное значение суммы для пустого дерева равным 0.
  9. sum_p(tree(V,L,R),N) :- V<=0, sum_p(L,LP), sum_p(R,RP), N=LP+RP.: Это правило говорит, что если значение узла отрицательное, то значение суммы равно сумме значений суммы левого и правого поддеревьев.
  10. sum_p(tree(V,L,R),N) :- V>0, sum_p(L,LP), sum_p(R,RP), N=LP+RP+V.: Это правило говорит, что если значение узла положительное, то значение суммы равно сумме значений суммы левого и правого поддеревьев, увеличенной на значение узла.
  11. avg_p(T,V) :- counter_p(T,N), sum_p(T,S), N > 0, N1=1/N, pow(S,N1,V).: Это правило вычисляет среднее значение положительных узлов дерева. Здесь N1 - это значение, обратное к N, и используется для вычисления среднего значения.
  12. avg_p(T,0) :- counter_p(T,N), abs(N)<1, write(No positive nodes!),nl.: Это правило обрабатывает случай, когда в дереве нет положительных узлов. В этом случае выводится сообщение No positive nodes! и программа завершается.
  13. goal: Это цель, которую нужно достичь. В данном случае, цель состоит в том, чтобы вычислить среднее значение положительных узлов дерева, представленного в виде -6 + 7 + 8 - (-1) + (-1). Значение переменной Z будет содержать результат. Этот код вычисляет среднее геометрическое положительных узлов дерева, представленное в виде -6 + 7 + 8 - (-1) + (-1). Результатом будет значение переменной Z.

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


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

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

15   голосов , оценка 3.8 из 5

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

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

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