Предикат, вычисляющий функцию exp(x), используя разложение в ряд (Visual prolog 5.2)
Формулировка задачи:
Здраствуйте. в институте начали проходить язык турбопролог. Дали задания, но вот над одним колдую уже неделю. в Общем задание: Создайте предикат, вычисляющий функцию exp(x), используя разложение в ряд по заданному количеству членов ряда. Благодавря эой статье вроде разобрался как это решается https://ru.wikipedia.org/wiki/Экспонента. НО!!!!!! По отдельности факториал, число в степень я вовожу, но вот как это соединить в логическую цепочку действий чтоб все было как в формуле . ПОДСКАЖИТЕ ПОЖУЛУЙСТА КАК ЭТО МОЖНО РЕАЛИЗОВАТЬ!!!! не судите меня строго я новичок в этом деле.
Листинг программы
- domains
- N,F,S,res=real
- number, product=integer
- predicates
- nondeterm result
- nondeterm fun(N,F,S)
- factorial (number, product)
- nondeterm results
- stepen(integer,integer)
- vozv
- clauses
- sum(0,1,1).
- sum(N,F,S):-
- N>0,
- N1=N-1,
- sum(N1,F1,S1),
- F=F1*1/N,
- S=S1+F.
- result:-write("nomer clena N="),readreal(N),
- sum(N,F,S), write("chlen=",F),nl,
- write("summa=",S),nl.
- stepen(0,1) :- !. /*возведение 4 в степень Q */
- stepen(N,P) :-
- N1=N-1,
- stepen(N1,Q),
- P=Q*4.
- vozv:-write("Vvedite 4iclo : "),readint(N),
- stepen(N,P),write("4iclo : ",P),nl.
- factorial(0,1) :- !. /*нахождение факториала*/
- factorial(N,Result) :-
- N1 = N -1,
- factorial(N1,Partial_factorial),
- Result = N * Partial_factorial.
- results:-write("chislo factoriala : "),readint(N),
- factorial(N,Result), write("faktorial = ",Result),nl.
- goal
- result,
- results,
- vozv.
Решение задачи: «Предикат, вычисляющий функцию 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). - Запуск программы и вывод результатов на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д