Сумма Ряда

Тема в разделе "Другие", создана пользователем -, 20 окт 2011.

  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).
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    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.
    не проверял
     
  3. Гость

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

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

    Как от нее избавиться?
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    у меня не выдает. Проверял на Turbo Prolog, а у вас диалект не указан.
     
  5. Гость

    У меня Visual Prolog v.5.2
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    проверил в VIP, ошибок не выдает, выдает предупреждения, но это не страшно. Так и предупреждений не выдает:
    Код (Text):
    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.
     
  7. Гость

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

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Иван89
    рекурсивный, вроде бы.
     
Загрузка...

Поделиться этой страницей