• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Сумма Ряда

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

Guest

Помогите пожалуйста. Никак не могу сделать.
Реализовать с помощью итеративного и рекурсивного алгоритмов на 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).
 
R

rrrFer

Код:
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

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

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

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

rrrFer

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

rrrFer

проверил в 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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!