Предикат, вычисляющий функцию exp(x), используя разложение в ряд (Visual prolog 5.2)
Формулировка задачи:
Здраствуйте. в институте начали проходить язык турбопролог. Дали задания, но вот над одним колдую уже неделю. в Общем задание: Создайте предикат, вычисляющий функцию exp(x), используя разложение в ряд по заданному количеству членов ряда. Благодавря эой статье вроде разобрался как это решается https://ru.wikipedia.org/wiki/Экспонента. НО!!!!!! По отдельности факториал, число в степень я вовожу, но вот как это соединить в логическую цепочку действий чтоб все было как в формуле . ПОДСКАЖИТЕ ПОЖУЛУЙСТА КАК ЭТО МОЖНО РЕАЛИЗОВАТЬ!!!! не судите меня строго я новичок в этом деле.
Решение задачи: «Предикат, вычисляющий функцию exp(x), используя разложение в ряд (Visual prolog 5.2)»
textual
Листинг программы
domains
i=integer
r=real
predicates
s(r,r,r,i,r,r)
clauses
s(E,_,Z,_,R,R):-abs(Z)<E,!.
s(E,X,Z,N,R1,R):-Z1=Z*X/(N+1),N1=N+1,R2=R1+Z1,s(E,X,Z1,N1,R2,R).
goal
write("Vvedite E="),readreal(E),write("Vvedite X="),readreal(X),
s(E,X,1.0,0,1.0,R).
Объяснение кода листинга программы
- Объявление типа переменных: domains i=integer r=real
- Объявление предиката: predicates s(r,r,r,i,r,r)
- Условие истинности предиката: clauses s(E,,Z,,R,R):-abs(Z)<E,!.
- Базовый случай: s(E,X,Z,N,R1,R):-Z1=Z*X/(N+1),N1=N+1,R2=R1+Z1,s(E,X,Z1,N1,R2,R).
- Случай, когда значение Z не превышает значение E: s(E,X,Z,N,R1,R):-Z1=Z*X/(N+1),N1=N+1,R2=R1+Z1,s(E,X,Z1,N1,R2,R).
- Ввод значений переменных E и X с клавиатуры:
goal
write(
Vvedite E=),readreal(E),write(Vvedite X=),readreal(X), s(E,X,1.0,0,1.0,R). - Запуск программы и вывод результатов на экран.