Автор: Пользователь скрыл имя, 13 Декабря 2010 в 19:59, курсовая работа
Программа имитирует действия следователя, раскрывающего по имеющимся фактам преступление – убийство гражданки Романовой. В качестве фактов описаны данные о подозреваемых лицах (фамилия, возраст, пол, профессия), круг их знакомств, перечислены все возможные мотивы преступления и улики.
Задание_________________________________________________________ 3
1. Назначение программного продукта_______________________________ 4
2. Описание данных_______________________________________________ 5
3. Описание методов решения_______________________________________ 7
4. Описание программы____________________________________________ 9
5. Описание пользовательского интерфейса ___________________________ 10
Список литературы________________________________________________ 12
ПРИЛОЖЕНИЕ. Исходный текст программы _________________________ 13
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение
высшего профессионального образования
Донской
Государственный Технический
Институт
Энергетики и Машиностроения (ИЭМ)
Кафедра
«Вычислительные системы и
Факультет
«Электромеханика и технологические машины»
Курсовая работа
по дисциплине
«Функциональное и логическое программирование»
на тему:
«Расследование преступления»
Вариант
- 4
Выполнила: студентка группы ЭИ 4-1
Астраханцева О.А.
Проверил: Маршаков
Д. В.
г. Ростов-на-Дону
2010г.
Содержание
Задание_______________________
1. Назначение программного
продукта______________________
2. Описание данных________________________
3. Описание методов
решения_______________________
4. Описание программы_____________________
5. Описание пользовательского интерфейса ___________________________ 10
Список литературы_____________
ПРИЛОЖЕНИЕ. Исходный
текст программы _________________________ 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("
owns_probably(X, Weapon),
person(X, _, m, _) ,
had_affair("
Месть выразим в следующем правиле: если оружие, которым была убита Романова совпадает с оружием, которым, возможно, владеет подозреваемый, и этот человек является женщиной, которая имела связь с тем же мужчиной, что и Романова, то мотив убийства месть.
motive("mest", X):-
killed_with("
owns_probably(X, Weapon),
person(X, _, w, _) ,
had_affair(X, Man) ,
had_affair("
Мотивом могут быть деньги для человека, не имеющего работы и нуждающегося в денежных средствах. Убийцой будет назван безработный Филатов в том случае, если у него найдено орудие убийства.
motive("money", X):-
killed_with("
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
Здесь соответственно используем для имени подозреваемых, поле, профессии, орудии убийства, мотиве, пятен на одежде символьный тип данных.
Для указания возраста используем целочисленный тип данных.
Информация о работе Расследование преступления на языке логического программирования