Расследование преступления на языке логического программирования

Автор: Пользователь скрыл имя, 13 Декабря 2010 в 19:59, курсовая работа

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

Программа имитирует действия следователя, раскрывающего по имеющимся фактам преступление – убийство гражданки Романовой. В качестве фактов описаны данные о подозреваемых лицах (фамилия, возраст, пол, профессия), круг их знакомств, перечислены все возможные мотивы преступления и улики.

Содержание

Задание_________________________________________________________ 3
1. Назначение программного продукта_______________________________ 4
2. Описание данных_______________________________________________ 5
3. Описание методов решения_______________________________________ 7
4. Описание программы____________________________________________ 9
5. Описание пользовательского интерфейса ___________________________ 10
Список литературы________________________________________________ 12
ПРИЛОЖЕНИЕ. Исходный текст программы _________________________ 13

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

Курсовая по ФиЛП.docx

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

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение

высшего профессионального образования

Донской Государственный Технический Университет

Институт  Энергетики и Машиностроения (ИЭМ) 
 
 

Кафедра «Вычислительные системы и информационная безопасность» 

Факультет «Электромеханика и технологические машины» 
 
 
 

Курсовая  работа

по  дисциплине

«Функциональное и логическое программирование»

на  тему:

«Расследование преступления»

Вариант - 4 
 
 
 
 

Выполнила:       студентка  группы ЭИ 4-1

                       Астраханцева О.А. 

Проверил:        Маршаков Д. В. 
 
 
 
 
 
 
 
 
 

г. Ростов-на-Дону

2010г. 

     Содержание

Задание_________________________________________________________  3

1. Назначение программного продукта_______________________________ 4

2. Описание данных_______________________________________________ 5

3. Описание методов решения_______________________________________ 7

4. Описание программы____________________________________________ 9

5. Описание пользовательского интерфейса ___________________________ 10

Список литературы________________________________________________ 12

ПРИЛОЖЕНИЕ. Исходный текст программы _________________________ 13 
 
 
 

 

 

     

     1. Назначение программного  продукта

     Программа имитирует действия следователя, раскрывающего по имеющимся фактам преступление – убийство гражданки Романовой. В качестве фактов описаны данные о подозреваемых лицах (фамилия, возраст, пол, профессия), круг их знакомств, перечислены все возможные мотивы преступления и улики.

     Программа должна помочь следователю в расследовании  запутанного дела по убийству горничной, работающей в гостинице, гражданки Романовой. Программа должна обработать все данные о подозреваемых лицах, выдав правильное имя преступника. Программное обеспечение должно учитывать отношения, в которых гражданка Романова находилась со всеми подозреваемыми в убийстве. В программе должны быть также выявлены основополагающие мотивы совершения преступления тем или иным подозреваемым лицом. Программа должна правильно соотносить профессии подозреваемых и те орудия убийства, которые могли быть у них под рукой  вследствие постоянного контакта с этими предметами из-за особенностей работы. Все улики, найденные на месте преступления, должны быть учтены при выборе преступника из всех подозреваемых лиц.

 

      2. Описание данных

     Существует  список людей, подозреваемых в убийстве гражданки Романовой. Имеются следующие  данные об этих лицах: фамилия, возраст, пол и профессия. Сведем в таблицу имеющуюся информацию о подозреваемых и добавим данные об убитой:

Фамилия Возраст Пол Профессия
Тарасов 55 м повар
Катаев 35 м таксист
Кириенко 26 м бизнесмен
Филатов 28 м безработный
Гурченко 19 ж парикмахер
Романова 19 ж горничная
 

     В программе выше описанные данные запишем при помощи следующих фактов:

     person("Tarasov", 55, m, "povar").

     person("Kataev", 35, m, "taxist").

     person("Kirienko", 26, m, "businesman").

     person("Filatov", 28, m, "workless").

     person("Gurchenko", 19, w, "barber").

     person("Romanova", 19, w, "gornichnaia").

     На  месте преступления было обнаружено орудие убийства – ножницы. Эта информация заносится в программу в виде фактов:

     killed_with("Romanova", "nognici").

     killed("Romanova").

     Имеется информация о том, что горничная  Романова имела связь с бизнесменом  Кириенко, у которого на протяжении долгого времени был роман с мужским парикмахером Гурченко, работающей в той же гостинице, что и гражданка Романова. Кроме Кириенко Романова встречалась с бывшим мужем Тарасовым, который служил в той же гостинице поваром на кухне.

     had_affair("Gurchenko", "Kirienko").

     had_affair("Romanova", "Tarasov").

     had_affair("Romanova", "Kirienko").

     На  одежде некоторых подозреваемых  имелись характерные коричневые пятна, вид которых не поддавался распознаванию. Поэтому в день убийства было проведено исследование в химической лаборатории для распознания наличия определенного химического состава пятен на одежде подозреваемых лиц. Экспертиза установила следующее:

Фамилия подозреваемого лица Пятно на одежде
Тарасов кровь
Катаев грязь
Гурченко кровь
Кириенко кофе
 

     Собранная информация отмечается в программе  следующим образом:

     smeared_in("Tarasov", "bloud").

     smeared_in("Kataev", "dirt").

     smeared_in("Gurchenko", "bloud").

     smeared_in("Kirienko", "coffee").

     Добавляем также строчку о том, что на теле убитой Романовой была обнаружена кровь:

     smeared_in("Romanova", "bloud").

     В день убийства после осмотра номера в гостиницы бизнесмена Кириенко в его кейсе был обнаружен пистолет. Этот факт отметим в программе:

     owns("Kirienko", "pistol").

 

     

     3. Описание методов решения

     Мы можем предположить некоторое соответствие определенных профессий подозреваемых с оружием, которое было им доступно и которое они могли использовать при убийстве Романовой. Так как мужской парикмахер Гурченко постоянно при работе использует ножницы, то возможна она могла применить их для убийства:

     owns_probably(X, "nognici") :-

           person(X, _, _, "barber").

     Так как повар Тарасов на кухне гостиницы для приготовления пищи постоянно использует нож, возможно, он мог впустить его в ход при убийстве гражданки Романовой:

     owns_probably(X, "knife") :-

           person(X, _, _, "povar").

     Кроме того, нахождение пистолета в кейсе Кириенко говорит о том, что он мог нанести им смертельные раны Романовой. Запишем правило -  если подозреваемое лицо владеет каким-либо оружием, значит, оно может использовать его для убийства.

     owns_probably(X, Object) :-

           owns(X, Object). 

     О подозреваемых могли быть следующие мотивы: ревность, месть и желание украсть деньги. Ревность можно представить в следующем правиле: если оружие, которым была убита Романова совпадает с оружием, которым, возможно, владеет подозреваемый, и этот человек мужского пола имел связь с убитой, то мотив убийства ревность.

     motive("revnost", X):-

           killed_with("Romanova", Weapon),

           owns_probably(X, Weapon),

           person(X, _, m, _) ,

           had_affair("Romanova", X).

     Месть выразим в следующем правиле: если оружие, которым была убита  Романова совпадает с оружием, которым, возможно, владеет подозреваемый, и  этот человек является женщиной, которая  имела связь с тем же мужчиной, что и Романова, то мотив убийства месть.

     motive("mest", X):-

           killed_with("Romanova", Weapon),

           owns_probably(X, Weapon),

           person(X, _, w, _) ,

           had_affair(X, Man) ,

           had_affair("Romanova", Man).

     Мотивом могут быть деньги для человека, не имеющего работы и нуждающегося в денежных средствах. Убийцой будет назван безработный Филатов в том случае, если у него найдено орудие убийства.

     motive("money", X):-

           killed_with("Romanova", Weapon),

           owns_probably(X, Weapon),

           person(X, _, _, "workless").

     Убийцей будет человек, у которого был  мотив к убийству и у которого пятна на одежде представляют собой  кровь убитой Романовой. Запишем  это при помощи следующего правила:

     killer(Killer) :-

           person(Killer, _, _, _) ,

           killed(Killed) ,

           Killed <> Killer ,

           motive(_, Killer),

           smeared_in(Killer, X) ,

           smeared_in(Killed, X).

 

     

     4. Описание программы

     Программа для расследования преступления написана на языке логического программирования PROLOG. Логическое программирование основано на теории и аппарате математической логике. Решение строится в процессе логического вывода и в процессе обработки программы. Отличительная особенность языка – отсутствие операторов присваивания. PROLOG подходит для быстрого прототипирования систем и для исследовательских задач. Преимущества логического программирования заключается в отсутствии побочных эффектов от операторов присваивания и компактном синтаксисе для представления последовательностей.  Использования именно этого языка позволяет легко записать имеющиеся факты о подозреваемых лицах и выявить преступника, на основе имеющихся правил и фактов.

      В домене объявим следующие типы данных:

      name, sex, occupation, object, vice, substance = symbol

      age=integer

      Здесь соответственно используем для имени  подозреваемых, поле, профессии, орудии убийства, мотиве, пятен на одежде символьный тип данных.

      Для указания возраста используем целочисленный  тип данных.

Информация о работе Расследование преступления на языке логического программирования