close

Вход

Забыли?

вход по аккаунту

?

ЛП2

код для вставкиСкачать
Цель работы:
Написать и отладить Пролог-программу решения логической задачи в соответствии
с номером варианта, проанализировать эффективность, безопасность и
непротиворечивость решения.
Под эффективностью и безопасностью понимать сведение к минимуму операции
перебора и предотвращение зацикливания, и комбинаторного взрыва нелогическими
средствами языка Пролог. Под непротиворечивостью понимать поиск единственного
верного решения.
Задача:
Отец дал каждой из своих дочерей по 8 рублей на покупки. – Я хочу, чтобы к
Восьмому марта каждая из вас, - сказал он,- купила подарки для тети Нади, тети Дины,
тети Розы и тети Сони. Но при этом постарайтесь выполнить три условия. Каждый подарок
должен стоить целое число рублей. Каждая из вас должна по-разному распределить
восемь рублей на четыре подарка. Подарки для каждой женщины должны в сумме стоить
одинаково. Девушки точно выполнили наказ своего отца. Люся истратила на подарок для
тети Нади больше денег, чем на подарки для всех остальных женщин вместе. Клара
израсходовала на подарок для тети Сони и Тети Розы столько же денег, сколько Люся
истратила на покупку для двух других женщин. Самы дорогой подарок Марины
предназначался для тети Дины, а Наташа самый дорогой из своих подарков преподнесла
тете Розе. Пятую дочь звали Светлана. Как израсходовала каждая из девушек свои
деньги?
Вариант задания: 26
Реализация данных условий логической задачи:
f(A,A,_).
f(I,A,B):-A<B,A1 is A+1,f(I,A1,B).
p(X,1,[X]):-!.
p(X,N,[I|Tail]):-X>0,f(I,1,X),X1 is X-I,N1 is N-1,p(X1,N1,Tail).
member(H,[H|_]).
member(H,[_|Tail]):-member(H,Tail).
dif(A,B):-member(X,A),not(member(X,B)),!.
solve(Lyusya,Klara,Marina,Natasha,Svetlana):%Условия Люси:
p(8,4,Lyusya),
Lyusya=[Nadya1,Dina1,Roza1,Sonya1],
Nadya1>4,
%Условия Клары:
p(8,4,Klara),
dif(Lyusya,Klara),
Klara=[Nadya2,Dina2,Roza2,Sonya2],
Sonya2+Roza2=:=Nadya1+Dina1,
%Условия Марины:
p(8,4,Marina),
dif(Lyusya,Marina),
dif(Klara,Marina),
Marina=[Nadya3,Dina3,Roza3,Sonya3],
Dina3>Nadya3,
Dina3>Roza3,
Dina3>Sonya3,
%Условия Наташи:
p(8,4,Natasha),
dif(Lyusya,Natasha),
dif(Klara,Natasha),
dif(Marina,Natasha),
Natasha=[Nadya4,Dina4,Roza4,Sonya4],
Roza4>Nadya4,
Roza4>Dina4,
Roza4>Sonya4,
%Условия Светланы:
p(8,4,Svetlana),
dif(Lyusya,Svetlana),
dif(Klara,Svetlana),
dif(Marina,Svetlana),
dif(Natasha,Svetlana),
Svetlana=[Nadya5,Dina5,Roza5,Sonya5],
%Глобальное 3-е условие Отца
Nadya1+Nadya2+Nadya3+Nadya4+Nadya5=:=10,
Dina1+Dina2+Dina3+Dina4+Dina5=:=10,
Roza1+Roza2+Roza3+Roza4+Roza5=:=10,
Sonya1+Sonya2+Sonya3+Sonya4+Sonya5=:=10.
?-solve(A,B,C,D,E),
write(' Lyusya: '),write(A),
write(' Klara: '),write(B),
write(' Marina: '),write(C),
write(' Natasha: '),write(D),
write(' Svetlana: '),write(E),nl,!.
Как видно реализовать задачу было не очень сложно. На каждой девушке нужно было
поставить ее условия, а так как все должно выполнятся одновременно, то есть смысл
занести все условия под один предикат.
Ответ:
Lyusya: [5,1,1,1]
Klara: [1,1,2,4]
Marina: [1,3,2,2]
Natasha: [2,2,4,0]
Svetlana: [1,3,1,3]
Так как в лабораторной требовалось одно решение, то я просто решил отсечь 14
остальных возможных решений.
Выводы:
В данной лабораторной я убедился, что язык Пролог способен решать довольно сложные
для человека задачи, с помощью обыкновенного перечисления всех поставленных в
задании условий. А так же, находить решения, которые человек или иной язык
программирования мог упустить.
Логическое Программирование
Лабораторная работа №2: Язык Пролог и его применение
для решения логических задач
Группа:
Студент:
Вариант задания:
9 декабря 2012 г.
8(О)-206(Б)
Дорофеев Артем
14
Документ
Категория
Литература, Лингвистика
Просмотров
8
Размер файла
39 Кб
Теги
лп2
1/--страниц
Пожаловаться на содержимое документа