Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2011, 22:24   #1
Fenixbo
 
Регистрация: 14.01.2011
Сообщений: 4
По умолчанию

Добрый вечер!
Буду очень признателен, если поможете в написании кода к уравнению:
f(x,n)= 1+ 1/x + 1/x^2 +1/x^3 +…+1/x^n при известных x и n
к сожалению, как сделать это в прологе разобраться не могу
заранее спасибо

есть небольшое продвижение я написал как возводить в любую степень но как это привязать к уравнению пока не придумал, подсобите если можете...

Код:
predicates
%	func(integer, integer, real)
	step(integer, integer, integer)
clauses
	step(_,0,1).
	step(1,_,1).
	step(X,N,F) :- 	N> 0,
			N1=N-1,
			step(X,N1,F1),
			F=F1*X.

Последний раз редактировалось Stilet; 14.01.2011 в 23:38.
Fenixbo вне форума Ответить с цитированием
Старый 14.01.2011, 23:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я в прологе не силен но что-то мне подсказывает что нуна вроде такого:
Код:
predicates
%	func(integer, integer, real)
	step(integer, integer, integer)
clauses
	step(_,0,1).
	step(1,_,1).
	step(X,N,F) :- 	N> 0,
			N1=N-1,x=x*x,
			step(X,N1,F1),
			F=1/F1*X.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.01.2011, 23:56   #3
Fenixbo
 
Регистрация: 14.01.2011
Сообщений: 4
По умолчанию

это немного не то, если убрать из кода х=х*х
и брать в пример задачу f(2,3)=1+0,5+0,25+0,125
то при исполнение кода с такими параметрами он выдаст первый шаг в вычислении
т.е. 0,5
хотя над строкой х=х*х надо подумать :\
блин сам в прологе не бум бум был бы паскаль за 2 минуты бы написал (
Fenixbo вне форума Ответить с цитированием
Старый 15.01.2011, 00:26   #4
Fenixbo
 
Регистрация: 14.01.2011
Сообщений: 4
По умолчанию

Сейчас еще кое что набрасал
Код:
predicates
	func(integer, integer, integer, real)
	step(integer, integer, integer)
clauses
    func(X,N,F,Rez) :- N >=0,
			P=N,
			N1=N-1,   	
			step(_,0,1).
			step(1,_,1).
			step(X,P,F) :- 	P> 0,
					P1=P-1,
					step(X,P1,F1),
					F=F1*X.
			func(X,N1,F,Rez1),
			Rez1=Rez+F.
естественно не работает но интерессно почему? в прологе вообще есть, так сказать, глобальность переменных ? ну или может ктото подскажет где ошибка...
компилятор матерится на строчку
Код:
func(X,N1,F,Rez1),
цитирую Clauses for the same predicate shoud be grouped. что бы это могло значить ?

Последний раз редактировалось Fenixbo; 15.01.2011 в 00:29.
Fenixbo вне форума Ответить с цитированием
Старый 15.01.2011, 01:45   #5
Косюра
Пользователь
 
Аватар для Косюра
 
Регистрация: 14.01.2011
Сообщений: 74
По умолчанию

просто напишу алгоритм.

Сумма = х, Temp = 1
а потом от 1 до N
{
Temp = temp/x
Сумма = сумма + temp
}
Девушка - переменная бинарного типа с рандомным значением
Косюра вне форума Ответить с цитированием
Старый 15.01.2011, 11:42   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а потом от 1 до N
Это пролог, тут рекурсия рулит. Я даже не помню чтоб в Прологе был циклический оператор... Жаль я его плоховато знаю.
Цитата:
Clauses for the same predicate shoud be grouped. что бы это могло значить ?
Опять таки из моих скудных познаний:
Ты написал
Цитата:
F=F1*X.
func(X,N1,F,Rez1),
Rez1=Rez+F.
Но точка после X закрывает выражение, и func у тебя вроде как ни к чему не прицеплено. Имхо тудыть запятую нужно...
I'm learning to live...

Последний раз редактировалось Stilet; 15.01.2011 в 11:44.
Stilet вне форума Ответить с цитированием
Старый 22.01.2011, 00:23   #7
Fenixbo
 
Регистрация: 14.01.2011
Сообщений: 4
По умолчанию

Прогу я таки дописал все оказалось проще чем я думал
Код:
domains
  s=real
  x,n = integer
predicates
  f(x,n,s)
clauses
  
  f(_,0,S) :- S=1.
  f(X,N,S) :- N>0, M=N-1, f(X,M,R), S=R*(1/X)+1.
мало ли кому поможет
Fenixbo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи на Прологе Svetlashka Помощь студентам 0 04.01.2010 20:43
Нужен код на Прологе lider24816 Помощь студентам 0 29.06.2009 18:31
Раскраска карты на турбо прологе supernolya@yandex. Помощь студентам 2 04.04.2009 22:23