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