Лабораторная работа №3 «использование структур и рекурсии при решении задач проектирования в системе турбо пролог» - shikardos.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
Лабораторная работа n 4 использование структур и рекурсии при решении... 1 162.52kb.
Лабораторная работа №1 2 Варианты заданий 2 Пример решения задачи... 4 489.46kb.
Резонанс в электрической цепи переменного тока 1 22.08kb.
Распознавание типов мыслительной деятельности по ээг при решении... 1 348.92kb.
Лабораторная работа №1. Сетевое оборудование и монтаж 1 188.06kb.
Урок по теме «Решение логических задач» 1 30.48kb.
Программа «Воспитательная работа в системе Школы полного дня» 1 159.7kb.
Лабораторная работа №3 Вольтамперометрическое определение ионов меди... 1 46.38kb.
«Решение примеров и составных задач» 1 38.99kb.
Урок физики в 9 классе Тема урока №1: Радиоактивность как свидетельство... 1 57.77kb.
Исследование операций и системный анализ пособие по проведению лабораторных... 1 249.68kb.
Лабораторная работа n 4 использование структур и рекурсии при решении... 1 162.52kb.
- 4 1234.94kb.
Лабораторная работа №3 «использование структур и рекурсии при решении задач проектирования - страница №1/1

Федеральное агентство по образованию

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

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

Тульский государственный университет

Кафедра ЭВМ

БАЗЫ ЗНАНИЙ И ЭКСПЕРТНЫЕ СИСТЕМЫ



Лабораторная работа № 3

«ИСПОЛЬЗОВАНИЕ СТРУКТУР И РЕКУРСИИ

ПРИ РЕШЕНИИ ЗАДАЧ ПРОЕКТИРОВАНИЯ

В СИСТЕМЕ ТУРБО ПРОЛОГ»


Выполнили:

ст. гр. 250261

Косухин К. Ю.

Сафронова А. Д.

Мантаева З. М.



Проверил:

Новиков А. С.


Цель работы


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

Задание на работу


  1. Загрузить в редактор программу dbf5.pro. Для просмотра текста программы воспользоваться клавишей F5. После восстановления окон на экране командой Run (клавиша Alt-R) произвести компиляцию и выполнение загруженной программы. Задать в режиме диалога цели.

  2. Загрузить в редактор программу dbf6.pro. После просмотра текста программы произвести ее компиляцию и выполнение. Задать в режиме диалога цели.

  3. Загрузить в редактор программу dbf7.pro. После просмотра текста программы произвести ее компиляцию и выполнение. Задать в режиме диалога цели

  4. Загрузить в редактор программу dbf8.pro, содержащую процедуру полного перебора вариантов проектных решений. Для просмотра текста программы воспользоваться клавишей F5. После восстановления окон на экране произвести компиляцию и выполнение программы. В качестве цели указать сначала perebor(1), а затем perebor(2). Заменить bin(A), bin(B) на выражение А=0, В=0 (или наоборот) и повторно выполнить программу dbf8.pro.


Выполение задания


Перечень целей, вычисленных при выполнении лабораторной работы

Выполнение DBF5.PRO



Goal: list

name var vol rs1 r1 rs2 r2

задача_1 1 10 0.10 0.04 0.00 0.05

задача_2 1 12 0.20 0.05 0.00 0.01

задача_3 1 8 0.20 0.03 0.00 0.00

задача_4 1 4 0.00 0.03 0.20 0.00

задача_5 1 6 0.00 0.00 0.15 0.07

задача_1 2 2 0.10 0.00 0.00 0.09Yes

Goal: task(X,1,_,rd(0,_),_)

X=задача_4

X=задача_5

2 Solutions

Goal: task(X,1,V,_,_),V<10

X=задача_3, V=8

X=задача_4, V=4

X=задача_5, V=6

3 Solutions


Выполнение DBF6.PRO

Goal: list(1)

name vol rs1 r1

z1_1 10 0.10 0.04

z2_1 12 0.20 0.05

z3_1 8 0.20 0.03

z4_1 4 0.10 0.03

z5_1 6 0.05 0.00Yes

Goal: list(2)

name vol rs1 r1 rs2 r2

z1_2 10 0.10 0.04 0.00 0.05

z2_2 12 0.20 0.05 0.00 0.01

z3_2 8 0.20 0.03 0.00 0.00

z4_2 4 0.00 0.03 0.10 0.00

z5_2 6 0.00 0.00 0.05 0.07Yes

Goal: task(X,_,[_])

X=z1_1


X=z2_1

X=z3_1


X=z4_1

X=z5_1


5 Solutions

Goal: task(X,_,[_,_])

X=z1_2

X=z2_2


X=z3_2

X=z4_2


X=z5_2

5 Solutions

Goal: task(X,_,[rd(0,_),_])

X=z4_2


X=z5_2

2 Solutions

Goal: task(X,V,[_,_]),V<10

X=z3_2, V=8

X=z4_2, V=4

X=z5_2, V=6

3 Solutions

Goal: task(X,_,[_,_|_])

X=z1_2

X=z2_2


X=z3_2

X=z4_2


X=z5_2

5 Solutions

Goal: name(z4_2)

Yes


Goal: name(X)

X=z1_1


X=z2_1

X=z3_1


X=z4_1

X=z5_1


X=z1_2

X=z2_2


X=z3_2

X=z4_2


X=z5_2

10 Solutions

Goal: volume(X,V),V<10

X=z3_1, V=8

X=z4_1, V=4

X=z5_1, V=6

X=z3_2, V=8

X=z4_2, V=4

X=z5_2, V=6

6 Solutions

Goal: rd(z4_2,R)

R=rd(0,0.03)

R=rd(0.1,0)

2 Solutions

Goal: list_rd(z4_2,L)

L=[rd(0,0.03),rd(0.1,0)]

1 Solution


Выполнение DBF7.PRO

Goal: L=[12,8,10],sumvint(L,Sum1),Sumvinti(L,Sum2).

L=[12,8,10], Sum1=30, Sum2=30

1 Solution

Goal: L1=[12,8,10],L2=[1,2,3],mulvint(L1,L2,Rez1),mulvinti(L1,L2,Rez2).

L1=[12,8,10], L2=[1,2,3], Rez1=58, Rez2=58

1 Solution

Goal: L1=[12,8,10],L2=[1,0,1],mulvbin(L1,L2,Rez1),mulvbini(L1,L2,Rez2).

L1=[12,8,10], L2=[1,0,1], Rez1=22, Rez2=22

1 Solution

Goal: L1=[8,12,10],maxvint(L1,Max1),maxvinti(L1,Max2).

L1=[8,12,10], Max1=12, Max2=12

1 Solution

Goal: L1=[8,12,10],L2=[1,0,1],maxvbin(L1,L2,Max1),maxvbini(L1,L2,Max2).

L1=[8,12,10], L2=[1,0,1], Max1=10, Max2=10

1 Solution


Отредактированный файл DBF8.PRO

/* файл dbf8.pro */

domains


rdd=rd(rs,r)

rdlist=rdd*

intlist=integer*

rlist=real*

rlistlist=rlist*

name=symbol

num_dsk,volume=integer

rs,r=real

predicates

task(name,volume,rdlist)

mulvbin(intlist,intlist,integer)

mulrvbin(rlist,intlist,rs)

invbin(intlist,intlist)

maxvbin(intlist,intlist,integer)

perebor(num_dsk)

form_list(num_dsk,intlist,rlistlist)

bin(integer)

calculate(intlist,intlist,rlistlist,volume,volume,rs)

sumrs(rlistlist,intlist,rs)

clauses


/* Статическая база данных */

task(z1_1,10,[rd(0.1,0.04)]).

task(z2_1,12,[rd(0.2,0.05)]).

task(z3_1,8,[rd(0.2,0.03)]).

task(z4_1,4,[rd(0.1,0.03)]).

task(z5_1,6,[rd(0.05,0.0)]).

task(z1_2,10,[rd(0.1,0.04),rd(0.0,0.05)]).

task(z2_2,12,[rd(0.2,0.05),rd(0.0,0.01)]).

task(z3_2,8,[rd(0.2,0.03),rd(0.0,0.0)]).

task(z4_2,4,[rd(0.0,0.03),rd(0.1,0.0)]).

task(z5_2,6,[rd(0.0,0.0),rd(0.05,0.07)]).

mulvbin([X|Xs],[1|Ys],Rez):-

mulvbin(Xs,Ys,Rez1),Rez=X+Rez1.

mulvbin([_|Xs],[0|Ys],Rez):-

mulvbin(Xs,Ys,Rez1),Rez=Rez1.

mulvbin([],[],0).

mulrvbin([X|Xs],[1|Ys],Rez):-

mulrvbin(Xs,Ys,Rez1),Rez=X+Rez1.

mulrvbin([_|Xs],[0|Ys],Rez):-

mulrvbin(Xs,Ys,Rez1),Rez=Rez1.

mulrvbin([],[],0).

invbin([0|Xs],[Y|Ys]):-

invbin(Xs,Ys),Y=1.

invbin([1|Xs],[Y|Ys]):-

invbin(Xs,Ys),Y=0.

invbin([],[]).

maxvbin([X|Xs],[1|Ys],Max):-

maxvbin(Xs,Ys,Max1),X>=Max1,Max=X.

maxvbin([X|Xs],[1|Ys],Max):-

maxvbin(Xs,Ys,Max1),X

maxvbin([_|Xs],[0|Ys],Max):-

maxvbin(Xs,Ys,Max1),Max=Max1.

maxvbin([],[],0).

/* Процедура полного перебора вариантов */

bin(0).bin(1).

perebor(X):-

write(" П Р О Е К Т Н Ы Е Р Е Ш Е Н И Я"),nl,

write(" число дисков - ",X),nl,

write("z1 z2 z3 z4 z5 Vmem Vreg Rsw"),nl,

fail.


perebor(X):-

form_list(X,Lv,Ls),

bin(A),bin(B),

bin(C),bin(D),bin(E),

L=[A,B,C,D,E],

calculate(L,Lv,Ls,Vmem,Vreg,Rsw),

writef("%2%3%3%3%3%6%6%8.2",A,B,C,D,E,Vmem,Vreg,Rsw),nl,

fail.


perebor(_):- !.

form_list(1,Lv,Ls):-

findall(V,task(_,V,[_]),Lv),

findall(Rs1,task(_,_,[rd(Rs1,_)]),Ls1),

Ls=[Ls1].

form_list(2,Lv,Ls):-

findall(V,task(_,V,[_,_]),Lv),

findall(Rs1,task(_,_,[rd(Rs1,_),_]),Ls1),

findall(Rs2,task(_,_,[_,rd(Rs2,_)]),Ls2),

Ls=[Ls1,Ls2].

calculate(L,Lv,Ls,Vmem,Vreg,Rsw):-

invbin(L,Linv),

mulvbin(Lv,Linv,Vmem),

maxvbin(Lv,L,Vreg),

sumrs(Ls,L,Rsw).

sumrs([X|Xs],L,Rsw):-

sumrs(Xs,L,Rsw1),

mulrvbin(X,L,Rsw2),

Rsw=Rsw1+Rsw2.

sumrs([],_,0).



Выполнение DFB8.PRO

Goal: perebor(1).

0 1 0 1 1 18 12 0.35



0 1 1 0 0 20 12 0.40

0 1 1 0 1 14 12 0.45

0 1 1 1 0 16 12 0.50

0 1 1 1 1 10 12 0.55

1 0 0 0 0 30 10 0.10

1 0 0 0 1 24 10 0.15

1 0 0 1 0 26 10 0.20

1 0 0 1 1 20 10 0.25

1 0 1 0 0 22 10 0.30

1 0 1 0 1 16 10 0.35

1 0 1 1 0 18 10 0.40

1 0 1 1 1 12 10 0.45

1 1 0 0 0 18 12 0.30

1 1 0 0 1 12 12 0.35

1 1 0 1 0 14 12 0.40

1 1 0 1 1 8 12 0.45

1 1 1 0 0 10 12 0.50

1 1 1 0 1 4 12 0.55

1 1 1 1 0 6 12 0.60

1 1 1 1 1 0 12 0.65

Yes
Goal: perebor(2).

0 1 0 1 1 18 12 0.35



0 1 1 0 0 20 12 0.40

0 1 1 0 1 14 12 0.45

0 1 1 1 0 16 12 0.50

0 1 1 1 1 10 12 0.55

1 0 0 0 0 30 10 0.10

1 0 0 0 1 24 10 0.15

1 0 0 1 0 26 10 0.20

1 0 0 1 1 20 10 0.25

1 0 1 0 0 22 10 0.30

1 0 1 0 1 16 10 0.35

1 0 1 1 0 18 10 0.40

1 0 1 1 1 12 10 0.45

1 1 0 0 0 18 12 0.30

1 1 0 0 1 12 12 0.35

1 1 0 1 0 14 12 0.40

1 1 0 1 1 8 12 0.45

1 1 1 0 0 10 12 0.50

1 1 1 0 1 4 12 0.55

1 1 1 1 0 6 12 0.60

1 1 1 1 1 0 12 0.65



Yes



Тула 2011