Логическиое программирование

Автор: Пользователь скрыл имя, 10 Мая 2012 в 15:12, курсовая работа

Описание работы

Цель курсовой работы по дисциплины функционально логическое программирование решить данную задачу:
В семье четверо детей. Им 5,8,13,15 лет. Детей зовут Аня, Боря, Вера и Галя. Сколько лет каждому ребенку если одна девочка ходит детский сад, Аня старше бори и сумма лет Ани и Веры делится на три.

Содержание

Введение…………………………………………………………………………………………2
Решение задачи (Алгоритм)………………………………………………..…...3
Листинг………………………………………………………………………………….…...6
Заключение……………………………………………………………………………………..7

Работа содержит 1 файл

Курсовая.docx

— 25.77 Кб (Скачать)

Содержание.

Введение…………………………………………………………………………………………2

  1. Решение задачи (Алгоритм)………………………………………………..…...3
  2. Листинг………………………………………………………………………………….…...6

Заключение……………………………………………………………………………………..7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение.

 Цель  курсовой работы по дисциплины функционально логическое программирование решить данную задачу:

В семье четверо  детей. Им 5,8,13,15 лет. Детей зовут Аня, Боря, Вера и Галя. Сколько лет  каждому ребенку если одна девочка ходит детский сад, Аня старше бори и сумма лет Ани и Веры делится на три.

Эта задача скорее математическая, так как требует  твердой логики и рассуждения. Решение этой задачи надо показать на языках программирования MULISP или TURBO PROLOG, рассмотрим задачу на TURBO PROLOG’е.

Язык  программирования Пролог (PROgramming LOGic) появился в 1972 г., Он был разработан Аланом Колмари из университета в Лумини (Марсель). Пролог в отличие от своих “сверстников”, продолжительное время развивался, применялся и обсуждался в сравнительно узком кругу исследователей, работающих в области искусственного интеллекта. Алан Колмери, автор языка Пролог, начал работы над полноценной компьютерной реализацией трудов Ковальского с 1972 года во французском университете Марсель-Экс. Программа на Прологе состоит из множества утверждений, каждое из которых является либо фактом о заданной информации, либо правилом, указывающим, как решение связано с заданными фактами или каким образом его можно из них вывести. В отличие от подавляющего большинства других языков Пролог обычно рассматривается в одном контексте с понятием “логическое программирование”. Фактически Пролог является не процедурным, а декларативным языком. Человек лишь описывает структуру задачи, а Пролог сам ищет решение. Характеристики языка: математическая логика; решение абстрактных задач; понимание естественного языка; автоматизацию проектирования; символьное решение уравнений; анализ биохимических структур.

 

 

 

 

 

 

  1. Решения задачи (Алгоритм)

Итак, рассмотрим все утверждения: Одна девочка ходит детский сад, Аня старше бори и сумма лет Ани и Веры делится на три. Исходя из этих данных есть только одно правильное решение. Ане и Вере 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,integer) //Сравнивание старших

delitsa(Name,integer,Name,integer) //Делится на 3

otv(string,integer,string,integer,string,integer,string,integer) //ответ

Секция  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,Y1),child(b,Y2),Y1>Y2.

Складываем возрос Ани и Веры и делим на три:

delitsa(a,Y1,v,Y2):-child(a,Y1),child(v,Y2),(Y1+Y2)mod 3=0.

Решение (вычисление возраста детей):

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Листинг.

В конечном итоге получилось:

predicates

child(Name,integer)

starshe(Name,integer,Name,integer)

delitsa(Name,integer,Name,integer)

otvet(string,integer,string,integer,string,integer,string,integer)

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,Y1),child(b,Y2),Y1>Y2.

delitsa(a,Y1,v,Y2):-child(a,Y1),child(v,Y2),(Y1+Y2)mod 3=0.

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 лет. Было дано три утверждения и только одно решение было правильным. Написанная программа работает исправно.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Информация о работе Логическиое программирование