Найти сумму ряда - Prolog
Формулировка задачи:
помогите пожалуйста найти сумму ряда: c помощью рекурсии.
Решение задачи: «Найти сумму ряда»
textual
Листинг программы
domains
i=integer
r=real
predicates
s(r,i,r,r)
clauses
s(_,0,0,1):-!.
s(X,N,R,A):-N1=N-1,
s(X,N1,R1,A1),
A=A1*exp((N)*ln(X)),
R=R1+exp((2*N-1)*ln(X))/(2*N-1),
write("R=",R),nl.
/*write("A=",A),nl*/
goal
write("X="),readreal(X),nl,write("N="),readint(N),nl,
s(X,N,R,_),write("S= ",R).
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Задача состоит в нахождении суммы ряда.
- Для решения задачи используется рекурсивный алгоритм.
- Переменная
iиспользуется для представления целых чисел, а переменнаяr- для представления вещественных чисел. - В коде определенаpredicate
s(r,i,r,r), которая принимает четыре аргумента: первый и второй аргументы типаrиiсоответственно, а также третий и четвертый аргументы типаr. - В коде определены два правила для функции
s: базовое правило и правило рекурсии. - Базовое правило
s(_,0,0,1)означает, что если значение первого аргумента равно нулю, то результатом будет единица. - Правило рекурсии
s(X,N,R,A):-N1=N-1,означает, что если значение первого аргумента равно X, значение второго аргумента равно N, значение третьего аргумента равно R, а значение четвертого аргумента равно A, то результатом будет сумма ряда от k до n, где k = 2*n - 1. - Значение переменной
Aвычисляется как произведение значения переменнойRна экспоненту (N) логарифма значения переменнойX. - Значение переменной
Rвычисляется как сумма значения переменнойR1и экспоненты (2N-1) логарифма значения переменнойXделенной на (2N-1). - В основной части кода происходит ввод значений переменных
XиNс помощью функцииreadrealиreadintсоответственно. - Затем вызывается функция
sс введенными значениями переменныхXиN, и результат выводится на экран с помощью функцииwrite. - Значение переменной
Rвычисляется и выводится на экран с помощью функцииwrite. - Комментарий
/*write(A=,A),nl*/указывает, что значение переменнойAне выводится на экран.