Сумма Ряда

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Помогите пожалуйста. Никак не могу сделать.
Реализовать с помощью итеративного и рекурсивного алгоритмов на Prolog:
e.jpg

Пока сумел сделать чтоб оно считало следующее:
s=sin1+sin2+...+sinN
А вот как с дробью?? Кто поможет?

Код:

predicates
summa(unsigned, real)

clauses
summa(1, 0.841) :- !.
summa(N, S) :-
Y = N-1,
summa (Y, P_summa),
S = sin(N)+P_summa.

goal
N=2,
summa (N,S).
 

Вложения

  • 47.8 КБ Просмотры: 234
R

rrrFer

#2
Код:
predicates
p( integer, integer, real, real )
goal
p( 5, 0, 0, S ), write(S).
clauses
p( N, N, _, 0 ).
p( N, M, S, R ):-
M + 1 = MM,
TS = S + sin( MM ),
p( N, MM, TS, RR ),
R = RR + 1 / TS.
не проверял
 
G

Guest

#3
Программа считает правильно. Тестировал при N=5. Ответ верный.
Но всегда выдает ошибку переполнения стека:

PROGRAM ERROR. Module:OBJ\GOAL$000.PRO Pos:179
Message:1010 Stack overflow

Как от нее избавиться?
 
R

rrrFer

#4
у меня не выдает. Проверял на Turbo Prolog, а у вас диалект не указан.
 
R

rrrFer

#6
проверил в VIP, ошибок не выдает, выдает предупреждения, но это не страшно. Так и предупреждений не выдает:
Код:
predicates
nondeterm p( integer, integer, real, real )
goal
p( 5, 0, 0.0, S ), write(S), readint(_).
clauses
p( N, N, _, 0.0 ).
p( N, M, S, R ):-
M + 1 = MM,
TS = S + sin( MM ),
p( N, MM, TS, RR ),
R = RR + 1 / TS.
 
G

Guest

#7
r04, спасибо за помощь. Только вот вопрос: а какой алгоритм это получается, рекурсивный или итеративный?