Автор: Пользователь скрыл имя, 10 Мая 2012 в 15:12, курсовая работа
Цель курсовой работы по дисциплины функционально логическое программирование решить данную задачу:
В семье четверо детей. Им 5,8,13,15 лет. Детей зовут Аня, Боря, Вера и Галя. Сколько лет каждому ребенку если одна девочка ходит детский сад, Аня старше бори и сумма лет Ани и Веры делится на три.
Введение…………………………………………………………………………………………2
Решение задачи (Алгоритм)………………………………………………..…...3
Листинг………………………………………………………………………………….…...6
Заключение……………………………………………………………………………………..7
Содержание.
Введение…………………………………………………………
Заключение……………………………………………………
Введение.
Цель курсовой работы по дисциплины функционально логическое программирование решить данную задачу:
В семье четверо детей. Им 5,8,13,15 лет. Детей зовут Аня, Боря, Вера и Галя. Сколько лет каждому ребенку если одна девочка ходит детский сад, Аня старше бори и сумма лет Ани и Веры делится на три.
Эта задача скорее математическая, так как требует твердой логики и рассуждения. Решение этой задачи надо показать на языках программирования MULISP или TURBO PROLOG, рассмотрим задачу на TURBO PROLOG’е.
Язык программирования Пролог (PROgramming LOGic) появился в 1972 г., Он был разработан Аланом Колмари из университета в Лумини (Марсель). Пролог в отличие от своих “сверстников”, продолжительное время развивался, применялся и обсуждался в сравнительно узком кругу исследователей, работающих в области искусственного интеллекта. Алан Колмери, автор языка Пролог, начал работы над полноценной компьютерной реализацией трудов Ковальского с 1972 года во французском университете Марсель-Экс. Программа на Прологе состоит из множества утверждений, каждое из которых является либо фактом о заданной информации, либо правилом, указывающим, как решение связано с заданными фактами или каким образом его можно из них вывести. В отличие от подавляющего большинства других языков Пролог обычно рассматривается в одном контексте с понятием “логическое программирование”. Фактически Пролог является не процедурным, а декларативным языком. Человек лишь описывает структуру задачи, а Пролог сам ищет решение. Характеристики языка: математическая логика; решение абстрактных задач; понимание естественного языка; автоматизацию проектирования; символьное решение уравнений; анализ биохимических структур.
Итак, рассмотрим все утверждения: Одна девочка ходит детский сад, Аня старше бори и сумма лет Ани и Веры делится на три. Исходя из этих данных есть только одно правильное решение. Ане и Вере 13 и 5 лет так как только сумма этих чисел делится на три, соответственно Боре 8 лет а Гале 15.
Теперь рассмотрим как будет выглядеть решение этой задачи на языке TURBO PROLOG:
Программа на Турбо Прологе состоит из следующих семи разделов:
директивы компилятора;
CONSTANTS - раздел описания констант;
DOMAINS - раздел описания доменов;
DATABASE - раздел
описания предикатов
PREDICATES - раздел описания предикатов;
CLAUSES - раздел описания предложений;
GOAL - раздел описания внутренней цели.
Используем PREDICATES. PREDICATES используется для обозначения аргументов. Здесь указываются все имена предикатов с соответствующими областями определения аргументов. Аргументы дизъюнктов Пролога называются термами. Существует три типа термов: константа, переменная, составной терм (структура).Только одна цель должна встретиться во время компиляции. Однако, цель может появиться где-либо после раздела predicates, объявляющего свою подцель.
Зададим значения ребенок (Child), старше (starshe), делится (delitsa),ответ (otv) и их переменные:
predicates
child(Name,integer)//ребенок(
starshe(Name,integer,Name,
delitsa(Name,integer,Name,
otv(string,integer,string,
Секция CLAUSES - Здесь описываются все дизъюнкты всех предикатов. Другое название дизъюнктов – статьи, предложения. Это факты и правила, соответствующие каждому из объявленных предикатов.
Напишем все четыре варианта подсказок:
clauses
child(a,13). //Аня, 13 лет
child(a,15). //Аня, 15 лет
child(b,8). //Боря, 8 лет
child(b,13). //Боря, 13 лет
child(v,5). //Вера, 5 лет
child(v,8). //Вера, 8 лет
child(v,13). //Вера, 13 лет
child(v,15). //Вера, 15 лет
child(g,5). //Галя, 5 лет
child(g,8). //Галя, 8 лет
child(g,13). //Галя, 13 лет
child(g,15). //Галя, 15 лет
Теперь сравним возрос Ани и Бори:
starshe(a,Y1,b,Y2):-child(a,
Складываем возрос Ани и Веры и делим на три:
delitsa(a,Y1,v,Y2):-child(a,
Решение (вычисление возраста детей):
otvet(a,Y1,b,Y2,v,Y3,g,Y4):-
child(a,Y1),
child(b,Y2),
child(v,Y3),
child(g,Y4),
delitsa(a,Y1,v,Y3),
starshe(a,Y1,b,Y2),
Y1+Y2+Y3+Y4=41.
В конечном итоге получилось:
predicates
child(Name,integer)
starshe(Name,integer,Name,
delitsa(Name,integer,Name,
otvet(string,integer,string,
clauses
child(a,13).
child(a,15).
child(b,8).
child(b,13).
child(v,5).
child(v,8).
child(v,13).
child(v,15).
child(g,5).
child(g,8).
child(g,13).
child(g,15).
starshe(a,Y1,b,Y2):-child(a,
delitsa(a,Y1,v,Y2):-child(a,
otvet(a,Y1,b,Y2,v,Y3,g,Y4):-
child(a,Y1),
child(b,Y2),
child(v,Y3),
child(g,Y4),
delitsa(a,Y1,v,Y3),
starshe(a,Y1,b,Y2),
Y1+Y2+Y3+Y4=41.
Заключение
После ввода :
Цель: otvet(a,Y1,b,Y2,v,Y3,g,Y4)
Выводи:
Y1= 13, Y2=8, Y3=5, Y4=15
1 решение.
Написанная программа дает нам правильный ответ в виде «Ане 13 лет, Боре 8 лет, Вере 5 лет и Гале 15 лет. Было дано три утверждения и только одно решение было правильным. Написанная программа работает исправно.