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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2013, 12:02   #1
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию Prolog.Ближайшее значение в списке

Доброго времени суток!
Делала лабораторную работу по деревьям. Вершины представила списком и в этом списке искала максимальное значение. После преподаватель захотел, следующее: пользователь вводит некоторое число и затем из списка находится ближайшее к нему. Как я поняла, мы должны находить минимальную разность между вводимым числом и числами из списка и записывать в ответ то число, с которым эта разность минимальна. Пыталась сделать, но не получилось (предикат bl должен находить как раз ближайшее значение).
Код:
domains
i=integer*
tree=nil;tr(integer,tree,tree)
predicates
nondeterm bl(i,integer,integer)
nondeterm max(i,integer)
conc(i,i,i)
treemax(tree,i)
clauses
bl([X],X,X).
bl([H|T],Y,X):-Y1=Y-H,bl(T,Y,X1),X1>Y1,X=Y1.
max([X],X).
max([H|T],H):-max(T,M),H>M,!.
max([_|T],M):-max(T,M).
conc([],N,N).
conc([H|T],L,[H|T1]):-conc(T,L,T1).
treemax(nil,[]).
treemax(tr(X,L,R),S):-treemax(L,Q1),treemax(R,Q2),
conc(Q1,[X|Q2],S).
goal
treemax(tr(2,tr(7,tr(9,nil,nil),tr(13,nil,nil)),
tr(5,nil,nil)),S),
write("Spisok vershin= ",S),nl,
write("Chislo: "),readint(Y),
bl(S,Y,X), write(X).
%max(S,X),write("Max: ",X).
Помогите пожалуйста! Очень рассчитываю на Вашу помощь!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 27.11.2013, 12:51   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
check(A, B, Val, Res):-
  !. % сюда вставить проверку так, чтобы результат попадал в Res

p(nil, _, _):-!, fail.
p(tr(NV, nil, R), V, Res):-
  !, p(R, V, RRes), check(NV, RRes, V, Res). 
p(tr(NV, L, lin), V, Res):-
  !, p(L, V, LRes), check(NV, LRes, V, Res). 
p(tr(NV, L, R), V, Res):-
  !, p(R, V, RRes), p(L, V, LRes), 
  check(NV, LRes, V, Res_1), check(Res_1, RRes, V, Res).
примерно так должно работать
rrrFer вне форума Ответить с цитированием
Старый 28.11.2013, 16:36   #3
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Спасибо большое за помощь! Вы меня очень выручили!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последнее значение в списке Maruff Microsoft Office Excel 13 16.02.2017 12:43
Сохранить выбранное значение в списке в другую ячейку hardas Microsoft Office Excel 7 07.01.2012 14:36
Установить значение в списке option Даниил_глазко JavaScript, Ajax 1 22.08.2011 16:40
выбрать первое и последнее значение в списке по условию simpleGo Microsoft Office Excel 4 06.12.2010 19:43
Функция ВПР возвращает лишь 1 ближайшее к заданному значение...... Death Dealer Microsoft Office Excel 4 24.11.2008 11:26