Автор работы: Пользователь скрыл имя, 28 Ноября 2012 в 18:50, курсовая работа
Современный этап развития вычислительной техники характеризуется расширением сфер ее применения. На первый план выдвигаются задачи интеллектуализации процессов машинной обработки информации, моделирования рассуждений человека-эксперта при решении прикладных задач из различных областей человеческого знания. Кроме того, актуальным является также полное и непротиворечивое представление самих знаний.
Введение ……………………………………………………………………………… 4
1 Теоретическая часть ………………………………………………………............... 6
1.1 Краткий обзор языков программирования Visual Prolog и Visual Lisp ……….. 6
1.2 Описание логических возможностей языка Visual Prolog ……………………… 8
1.3 Описание функциональных возможностей языка Visual Lisp ………………...10
2 Практическая часть ……………………………………………………………….. 12
2.1 Постановка задачи логического программирования …………………………. 12
2.2 Описание методов решения и используемых средств языка Visual Prolog …. 12
2.3 Описание листинга программы Visual Prolog …………………………………. 14
2.4 Тестирование программы Visual Prolog…………………………………………16
2.5 Постановка задачи функционального программирования ...…………………. 17
2.6 Описание листинга программы Auto Lisp ...…………………………………. 18
2.7 Тестирование программы Auto Lisp ..………………………………………… 23
Заключение …………………………………………………………………………… 25
Список используемых источников ……………………………………………….... 26
Определите, в каком городе живет каждый из ребят.
Требования к задаче.
Средствами языка Visual Prolog требуется разработать алгоритм решения
логической задачи с использованием визуального интерфейса программирования.
2.2 Описание
методов решения и
Предложенная задача относится к виду логических задач на соответствие. В основе решения таких задач лежит глубокий анализ известных утверждений. Тщательно проанализировав условие, можно определить первую пару соответствий или несколько таких пар. Затем, рассуждая логически, находится полное решение или получают противоречие, которое говорит о том, что первоначальное соответствие, произвольно выбранное из нескольких пар, неверно.
Перед непосредственной реализацией задачи на языке Пролог, она была решена на основе логических рассуждений. В результате получили следующее.
Первоначально необходимо определить города, в которых точно не может жить каждый из указанных ребят. Так как москвич сидел между томичом и Витей, следовательно, Витя не может жить в Москве и Томске. Так как санкт-петербуржец сидел между Юрой и Толей, следовательно Юра и Толя не из Санкт-Петербурга, а напротив санкт-петербуржца сидели пермяк и Алеша – Алеша не из Санкт-Петербурга, и не из Перми. Так как Коля никогда не был в Санкт-Петербурге, значит Коля не санкт-петербуржец. Юра не бывал в Москве и Томске, значит он не из Томска и не из Москвы. Томич с Толей регулярно переписываются, следовательно Толя не из Томска. Из всех фактов известных о Юре делаем вывод, что он может жить только в Новгороде. Следующий человек по количеству известных о нем фактов – Толя, получаем вывод о том, что он живет в Москве. По остальным ребятам методом постепенного исключения, пользуясь фактами и полученными выводами, приходим к такому расположению: Алеша – Томск, Коля – Пермь, Витя – Санкт – Петербург.
Для реализации поставленной задачи на языке Пролог созданы предикаты:
name(symbol) - определение имени;
nondeterm city(symbol) – определение города.
Для последующего определения соответствий создан предикат:
nondeterm relation(symbol,symbol).
Для окончательного поиска решения определен предикат:
nondeterm decision(symbol, symbol, symbol, symbol, symbol, symbol, symbol, symbol, symbol, symbol).
2.3 Описание листинга программы Visual Prolog
Модуль kurs.pro
PREDICATES
name(symbol)
nondeterm city(symbol)
nondeterm relation(symbol,
nondeterm decision(symbol,
CLAUSES
name(юра).
name(толя).
name(витя).
name(алеша).
name(коля).
city(москва).
city(питер).
city(томск).
city(новгород).
city(пермь).
relation(X,Y):-name(X),city(Y)
relation(X,Y):-name(X),city(Y)
relation(X,Y):-name(X),city(Y)
relation(X,Y):-name(X),city(Y)
relation(X,Y):-name(X),city(Y)
decision(X1,Y1,X2,Y2,X3,Y3,X4,
X2=юра,
X3=толя,
X4=алеша,
X5=коля,
Y1<>Y3,
Y2<>Y3,
Y3<>Y5,
GOAL
decision(X1,Y1,X2,Y2,X3,Y3,X4,
write(X1," - ",Y1),nl,
write(X2," - ",Y2),nl,
write(X3," - ",Y3),nl,
write(X4," - ",Y4),nl,
write(X5," - ",Y5),nl.
2.4 Тестирование программы Visual Prolog
Листинг модуля kurs.pro показан на рисунке 1.
Рисунок 1. Листинг модуля kurs.pro
Окно-результат решения задачи показано на рисунке 2.
Рисунок 2. Внешний вид окна «Результат решения задачи»
2.5 Постановка
задачи функционального
Средствами языка Auto Lisp требуется разработать комплекс функций для построения 2D изображения детали с простановкой необходимых размеров, изображенного на рисунке 3.
Рисунок 3 – Деталь
2.6 Описание листинга программы Auto Lisp
Для построения 2D изображения детали создана функция kontur(), в которой использованы встроенные функции подпрограммы Visual Lisp, такие как например:
(list <выражение> ...)
Эта функция берет любое число выражений (<выражение>) и организует из них строку, возвращая список. В программе она использовалась для определения значений двухмерных точек.
(setq <символ1> <выражение1> [<символ2> <выражение2>]...)
Эта функция устанавливает в <символ1> значение <выражения1>, в <символ2> значение <выражения2> и т.д. Это основная функция присвоения.
Остальные функции служат для определения толщины и типа линий, привязки и построения каждой фигуры в отдельности.
(defun kontur()
(setq
;установка параметров
x 50 y 50 l 80 l1 10 l2 40 l3 50 h1 15 h2 10 h3 50 h4 15
x1 (+ x (+ l 50)) y1 50 w 50
;ключевые точки
;первая фигура
p1 (list x y)
p2 (list (+ x (/ (- l l1) 2)) y)
p3 (list (+ x (/ (- l l1) 2)) (+ y h1))
p4 (list (+ x (+ (/ l 2)(/ l1 2)))(+ y h1))
p5 (list (+ x (+ (/ l 2)(/ l1 2))) y)
p6 (list (+ x (+(+ (/ l 2)(/ l1 2))(/ (- l l1) 2))) y)
p7 (list (+ x l) (+ y h2))
p8 (list (+ x (+ (/ (- l l3) 2) l3) ) (+ y (- h3 h4)))
p9 (list (+ x (+ (/ l 2) (/ l2 2))) (+ y (- h3 h4)))
p10 (list (+ x (/ l 2))(+ y h3))
p11 (list (+ x (- (/ l 2) (/ l2 2)))(+ y (- h3 h4)))
p12 (list (+ x (/ (- l l3) 2)) (+ y (- h3 h4)))
p13 (list x (+ y h2))
p14 (list (+ x (+ (/ (- l l3) 2) l3) ) (+ y h2))
p15 (list (+ x (/ (- l l3) 2)) (+ y h2))
;точки для нанесения размеров
p56 (list (+ x (+ (/ l 2)(/ l1 2))) (- y 10))
p57 (list (+ x (+ (/ l 2) (/ l2 2))) (+ y (+ h3 5)))
p58 (list (+ x (+ (/ (- l l3) 2) l3) ) (+ y (+ h3 15)))
p59 (list (- x 10) (+ y h2))
p50 (list (- (+ x (/ (- l l3) 2)) 10) (+ y h3))
p51 (list (- (+ x (/ (- l l1) 2)) 10) (+ y h1))
p52 (list (- x 20) (+ y h3))
;точки для нанесения осевых линий
p71 (list (+ x (/ l 2))(+ (+ y h3) 5))
p72 (list (+ x (/ l 2)) (- y 5))
;вторая фигура
p21 (list x1 y1)
p22 (list (+ x1 l) y1)
p23 (list (+ x1 l) (+ y1 h3))
p24 (list x1 (+ y1 h3))
p25 (list (+ x1 (/ l 2)) y1)
p26 (list (+ x1 (/ l 2)) (+ y1 h3))
p27 (list (+ x1 (-(/ l 2)(/ l3 2))) y1)
p28 (list (+ x1 (-(/ l 2)(/ l3 2))) (+ y1 h3))
p29 (list (+ x1 (/ l2 2)) y1)
p30 (list (+ x1 (/ l2 2)) (+ y1 h3))
p31 (list (+ x1 (- l (-(/ l 2)(/ l3 2)))) y1)
p32 (list (+ x1 (- l (-(/ l 2)(/ l3 2)))) (+ y1 h3))
p33 (list (+ x1 (- l(/ l2 2))) y1)
p34 (list (+ x1 (- l(/ l2 2))) (+ y1 h3))
p35 (list x1 (+ y1 (-(/ h3 2)(/ h2 2))))
p36 (list (+ x1(-(/ l 2)(/ l3 2))) (+ y1 (- (/ h3 2)(/ h2 2))))
p37 (list x1 (+ (+ y1 (- (/ h3 2)(/ h2 2))) 10))
p38 (list (+ x1(-(/ l 2)(/ l3 2))) (+ (+ y1 (- (/ h3 2)(/ h2 2))) 10))
p39 (list (+ x1 (- l (-(/ l 2)(/ l3 2)))) (+ y1 (- (/ h3 2)(/ h2 2))))
p40 (list (+ x1 l) (+ y1 (- (/ h3 2)(/ h2 2))))
p41 (list (+ x1 (- l (-(/ l 2)(/ l3 2)))) (+ (+ y1 (- (/ h3 2)(/ h2 2))) 10))
p42 (list (+ x1 l) (+ (+ y1 (- (/ h3 2)(/ h2 2))) 10))
;точки для нанесения размеров
p60 (list (+ x1 l) (- y 10))
p61 (list (- x1 5) (+ (+ y1 (- (/ h3 2)(/ h2 2))) 10))
p62 (list (- x1 15) (+ y1 h3))
;точки для нанесения осевых линий
p81 (list (- x1 5) (+ y1(/ h3 2)))
p82 (list (+ (+ x1 80) 5) (+ y1(/ h3 2)))
;точки для нанесения пунктирных линий
p91 (list (+ x1 (/ (- l l1) 2)) y1)
p92 (list (+ x1 (/ (- l l1) 2)) (+ y1 h3))
p93 (list (+ x1 (+ (/ l 2)(/ l1 2))) y1)
p94 (list (+ x1 (+ (/ l 2)(/ l1 2))) (+ y1 h3))
)
(command "_.osnap" "_none") ;отмена привязки
(command "_.ltscale" "0.5") ;разряженность линий
(command "_.linetype" "_s" "CONTINUOUS" "")
;Установка сплошного типа линий
;Отрисовка первой фигуры
(command "_pline" p1 "_w" "1" "" p2 p3 p4 p5 p6 p7 p8 p9
p10 p11 p12 p13 p1 ""
"_pline" p7 "_w" "1" "" p14 p8 ""
"_pline" p13 "_w" "1" "" p15 p12 "")
;Отрисовка горизонтальных
(command "_dim" "_horiz" p2 p5 p56 (rtos l1 2 0) "_exit")
(command "_dim" "_horiz" p11 p9 p57 (rtos l2 2 0) "_exit")
(command "_dim" "_horiz" p12 p8 p58 (rtos l3 2 0) "_exit")
;Отрисовка вертикальных размеров
(command "_dim" "_vertical" p1 p13 p59 (rtos h2 2 0) "_exit")
(command "_dim" "_vertical" p12 p10 p50 (rtos h4 2 0) "_exit")
(command "_dim" "_vertical" p2 p3 p51 (rtos h1 2 0) "_exit")
(command "_dim" "_vertical" p1 p10 p52 (rtos h3 2 0) "_exit")
(command "_.linetype" "_s" "Dashdot" "")
;Установка штрихпунктироного типа линий
;Отрисовка осей
(command "line" p71 p72 "")
(command "_.linetype" "_s" "CONTINUOUS" "")
;Установка сплошного типа линий
;Отрисовка второй фигуры
(command "_pline" p21 "_w" "1" "" p27 p29 p25 p33 p31 p22 p40 p42 p23 p32 p34 p26 p30 p28 p24 p37 p35 p21 ""
"_pline" p27 "_w" "1" "" p36 p38 p28 ""
"_pline" p29 "_w" "1" "" p30 ""
"_pline" p25 "_w" "1" "" p26 ""
"_pline" p33 "_w" "1" "" p34 ""
"_pline" p31 "_w" "1" "" p39 p41 p32 ""
"_pline" p35 "_w" "1" "" p36 ""
"_pline" p37 "_w" "1" "" p38 ""
"_pline" p39 "_w" "1" "" p40 ""
"_pline" p41 "_w" "1" "" p42 "")
;Отрисовка горизонтальных
(command "_horiz" p21 p22 p60 (rtos l 2 0) "_exit")
;Отрисовка вертикальных размеров
(command "_dim" "_vertical" p35 p37 p61 (rtos h2 2 0) "_exit")
(command "_dim" "_vertical" p21 p24 p62 (rtos h3 2 0) "_exit")
(command "_.linetype" "_s" "Dashdot" "")
;Установка штрихпунктироного типа линий
;Отрисовка осей
(command "line" p81 p82 "" )
(command "_.linetype" "_s" "Dashed" "")
;Установка штрихового типа линий
;Отрисовка линий невидимого контура
(command "line" p91 p92 ""
"line" p93 p94 "")
)
2.7 Тестирование программы Auto Lisp
Листинг модуля tmp.lst показан на рисунке 4.
Рисунок 4 – Листинг модуля tmp.lst.
Результат выполнения функции kontur показан на рисунке 5.
Рисунок 5 – Результат построения сетевого графика в среде AutoCad
Заключение
Целью данной курсовой работы
являлось изучение приемов логического
и функционального
В теоретической части были рассмотрены основы программирования на языках Пролог и AutoLisp, изучены логические возможности языка Пролог и функциональные возможности языка AutoLisp.
В практической части реализованы задача на соответствие в среде Пролог с использованием визуального графического интерфейса и разработана функция построения сетевого графика плана работы учебного заведения на языке AutoLisp. Приведены листинги исходных модулей и результаты их тестирования.
Список используемых источников
Информация о работе Реализация программ средствами языков Visual Prolog и Visual Lisp