Создайте предикат, вычисляющий среднегеометрическое натуральных чисел, кратных 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.

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

  1. Начнем с определения предикатов:
    • prod(real,real,real) - принимает три аргумента типа real и вычисляет их произведение.
    • pow(real,real,real) - принимает три аргумента типа real и вычисляет их возведение в степень.
    • count(real,real,real) - принимает три аргумента типа real и вычисляет количество натуральных чисел, кратных 3, не превосходящих первого аргумента.
    • task(real,real) - принимает два аргумента типа real и вычисляет среднегеометрическое натуральных чисел, кратных 3, не превосходящих первого аргумента.
  2. Далее, перейдем к определению правил (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.
  3. В конце, определим цель (goal):
    • goal - выводит на экран значения N и R.
  4. В начале главной программы, считывается значение N с помощью функции readint(N).
  5. Затем вызывается функция task(N,R), которая вычисляет значение R.
  6. Наконец, выводятся на экран значения N и R с помощью функции write(N), write(R), nl.

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы