Создайте предикат, вычисляющий среднегеометрическое натуральных чисел, кратных 3, не превосходящих N - Prolog
Формулировка задачи:
Создайте предикат, вычисляющий среднегеометрическое натуральных чисел, кратных 3, не превосходящих N.
Решение задачи: «Создайте предикат, вычисляющий среднегеометрическое натуральных чисел, кратных 3, не превосходящих N»
textual
Листинг программы
predicates prod(real,real,real) pow(real,real,real) count(real,real,real) task(real,real) clauses prod(N,N,N) :- !. prod(N,K,1) :- K>N, !. prod(N,K,Z) :- K3=K+3, prod(N,K3,U), Z=U*K. pow(X,Y,Z) :- exp(Y*ln(X))=Z. count(N,K,1) :- K=N, !. count(N,K,0) :- K>N, !. count(N,K,Z) :- K3=K+3, count(N,K3,U), Z=U+1. task(N,R) :- count(N,3,P), prod(N,3,A), B=1.0/P, pow(A,B,R). goal write("N="),readint(N),task(N,R),write("R="),write(R),nl.
Объяснение кода листинга программы
- Начнем с определения предикатов:
- prod(real,real,real) - принимает три аргумента типа real и вычисляет их произведение.
- pow(real,real,real) - принимает три аргумента типа real и вычисляет их возведение в степень.
- count(real,real,real) - принимает три аргумента типа real и вычисляет количество натуральных чисел, кратных 3, не превосходящих первого аргумента.
- task(real,real) - принимает два аргумента типа real и вычисляет среднегеометрическое натуральных чисел, кратных 3, не превосходящих первого аргумента.
- Далее, перейдем к определению правил (clauses):
- prod(N,N,N) :- !. - базовый случай, когда все три аргумента равны N, результат также будет N.
- prod(N,K,1) :- K>N, !. - если K больше N, то результат будет 1.
- prod(N,K,Z) :- K3=K+3, prod(N,K3,U), Z=U*K. - если K меньше или равно N, то результат будет произведением аргументов U и K.
- pow(X,Y,Z) :- exp(Y*ln(X))=Z. - вычисляет значение Z как результат возведения X в степень Y.
- count(N,K,1) :- K=N, !. - базовый случай, когда K равно N, результат будет 1.
- count(N,K,0) :- K>N, !. - если K больше N, то результат будет 0.
- count(N,K,Z) :- K3=K+3, count(N,K3,U), Z=U+1. - если K меньше или равно N, то результат будет суммой аргументов U и 1.
- task(N,R) :- count(N,3,P), prod(N,3,A), B=1.0/P, pow(A,B,R). - вычисляет значение R как среднегеометрическое натуральных чисел, кратных 3, не превосходящих N.
- В конце, определим цель (goal):
- goal - выводит на экран значения N и R.
- В начале главной программы, считывается значение N с помощью функции readint(N).
- Затем вызывается функция task(N,R), которая вычисляет значение R.
- Наконец, выводятся на экран значения N и R с помощью функции write(N), write(R), nl.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д