19 / 20 / 8
Регистрация: 27.11.2010
Сообщений: 323
1

Решение вычислить функцию на прологе (Рекурсивныйалгоритм)

15.11.2012, 12:40. Показов 1342. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите шешить на прологе
Вычислить: y= sin(1)+sin (1,1)+sin (1,2)+…+sin 2.

решил итеративным все работает
Рекурсивная программа вычисления факториалов.
(Итеративный алгоритм)
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
predicates
 func(real, real)
 func(real, real, real, real)
 clauses
 
    func(N, FactN) :-
                  func(N, FactN, 0.8, 0.0).
            func(N, FactN, N, FactN) :- !.
            func(N, FactN, I, P) :- I <=2.0, /*условие выхода не срабатывает  поставил это условие для прекращения алгоритма*/
               NewI = I+0.2,
               NewP = P+sin(NewI),write(NewI, " ", N, " S= ", NewP),nl,
               func(N, FactN, NewI, NewP).
 goal
 N=2.0,
 func (N,FactN).
а вот рекурсивный не хочет работать и я не впиливаю почему:

Рекурсивная программа вычисления
факториаов..(Рекурсивныйалгоритм)
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
predicates
 func(real, real)
 
 clauses
 
 func(0.0, 0.0) :- !.
 
              func(X, FactX) :-
                 Y = X-0.2,
                 func (Y, FactY),
                 FactX = sin(X)+FactY.
 goal
 X=2.0,
 func(X, FactX).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2012, 12:40
Ответы с готовыми решениями:

Вычислить функцию. Проверить решение
Вычислить значение функции: z = etg x cos(|ax2 + b| - 1), где a, b - постоянные, x, z -...

Как запрограммировать лог. функцию на прологе
Запрограммировать логическую функцию:

Вычислить в прологе
3*k!*n!-1 помогите кто знает. Заранее благодарю)

Решение системы уравнений: написать функцию, которая как параметр будет использовать другую функцию
Ребята помогите разобраться с указателем на функцию! у меня решается система ДУ методом...

2
2505 / 1480 / 37
Регистрация: 14.09.2009
Сообщений: 2,740
16.11.2012, 22:40 2
Для вещественных чисел опасно использовать проверку на равенство.
Поэтому просто замените первое правило на
func(X, 0.0) :- X<=0.0, !.
0
19 / 20 / 8
Регистрация: 27.11.2010
Сообщений: 323
17.11.2012, 16:09  [ТС] 3
спасибо вроде работает щас по тестирую

Добавлено через 23 минуты
спасибо вроде работает щас по тестирую

интересно почему они разные результаты показывают:

Javascript
1
2
3
4
5
6
7
8
9
10
11
 clauses
    func(N, FactN) :-
                  func(N, FactN, 1.0, 0.0).
            func(N, FactN, N, FactN) :- !.
            func(N, FactN, I, P) :- I <2.0, /*условие выхода не срабатывает  поставил это условие для прекращения алгоритма*/
               NewI = I+0.2,
               NewP = P+sin(NewI),write(NewI, " ", N, " S= ", NewP),nl,
               func(N, FactN, NewI, NewP).
 goal
 N=2.0,
 func (N,FactN).
на 2.2 2 S = 5.608703881 //2.2 соответствует вроде 2 так как там I++


Javascript
1
2
3
4
5
6
7
8
9
10
11
predicates
 func(real, real)
 clauses
 func(X, 0.0) :- X<=1.0, !.
              func(X, FactX) :-
                 Y = X-0.2,
                 func (Y, FactY),write(Y, " ", FactY ),nl,
                 FactX = sin(X)+FactY.
 goal
 X=2.0,
 func(X, FactX).
на X=2 S = 5.641678462
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2012, 16:09
Помогаю со студенческими работами здесь

Вычислить функцию (оформить как функцию)
Господа, помогите пожалуйста

Решение уравнения с используя функцию
Используя пользовательскую функцию (одну для двух сумм) рассчитать по формуле:

Решение уравнения с используя функцию
Используя пользовательскую функцию (одну для двух сумм) рассчитать по формуле:...

Решение квадратного уравнения через функцию
Здравствуйте, уважаемые программисты. Возникла проблема с написанием кода для решения квадратного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru