Практикум по дисциплине Логическое и функциональное программирование
.pdf
Лабораторная работа № 2
Программирование структур данных на языке Prolog
Порядок выполнения работы:
В соответствии с вариантом написать программу поиска решения задачи на языке ПРОЛОГ с использованием структур данных. Во всех вариантах используется дерево, предложенное на рисунке.
3
2 |
5 |
1 2
8
9
Варианты лабораторных заданий
1. |
2. |
3. |
|
|
|
1. Определить макси- |
1.Найти второй по вели- |
1. Сформировать |
мальный элемент списка |
чине элемент списка чисел |
новый список из тех |
чисел [5, 2, 9, 8, 3, 1]. |
[1, 5, 2, 6, 3]. |
элементов списка [7, 1, |
2. Определить число |
2. Вычислить среднее |
3, 8, 5, 4, 2], которые |
вхождений элемента 2 |
арифметическое всех |
стоят на нечетных |
в дерево. |
элементов дерева. |
позициях. |
|
|
2. Определить, входят |
|
|
ли элементы 7 и 8 в |
|
|
дерево. |
4. |
5. |
6. |
|
|
|
1. Подсчитать количе- |
1. Найти сумму макси- |
1. Определить среднее |
ство целых чисел, вхо- |
мального и минимального |
арифметическое значе- |
дящих в список [1, 2, 2, |
элементов списка [8, 4, 2, |
ние чисел списка [6, 3, |
3, 4, 5, 5, 6, 6] только |
6, 15]. |
7, 9, 4, 1]. |
один раз. Список упоря- |
2. Найти в дереве длину |
2. Определить, сколько |
дочен. |
(число ветвей) пути от |
элементов дерева |
2. Найти наибольший |
корня до ближайшей вер- |
находится на каждом |
элемент дерева. |
шины с элементом n. |
уровне. |
7. |
8. |
9. |
|
|
|
1. Найти сумму элемен- |
1. Перенести в конец |
1. Получить новый |
тов данного списка, ко- |
списка [1, 2, 3, 4, 5] все |
список из двух следу- |
|
|
|
|
11 |
|
торые стоят на четных |
четные элементы. |
ющим образом: в нача- |
позициях. Список [5, 1, |
2. Определить максималь- |
ло нового списка поме- |
3, 7, 8, 4]. |
ную глубину дерева, т.е. |
стить все четные эле- |
2. Найти число вершин |
число ветвей в самом |
менты списка [5, 2, 4, |
на n-м уровне дерева |
длинном из путей от корня |
8], а в конец – все не- |
(корень считать верши- |
дерева до листьев. |
четные элементы спис- |
ной 0-го уровня). |
|
ка [1, 2, 5, 8, 7]. |
|
|
2. Вывести элементы |
|
|
из всех листьев дерева. |
|
|
|
10. |
11. |
12. |
|
|
|
1. Определить элемент |
1. Определить минималь- |
1. Найти предпослед- |
списка [1, 2, 3, 4, 6, 7, 9], |
ный элемент списка чисел |
ний по величине эле- |
имеющий минимальное |
[5, 2, 9, 8, 3, 1]. |
мент списка чисел |
отклонение от среднего |
2. Определить число |
[1, 5, 2, 6, 8]. |
значения элементов |
вхождений элемента 8 в |
2. Вычислить сумму |
списка. |
дерево. |
значений всех элемен- |
2. Вывести все элементы |
|
тов дерева. |
дерева в порядке их воз- |
|
|
растания. |
|
|
|
|
|
13. |
14. |
15. |
|
|
|
1. Сформировать новый |
1. Подсчитать количество |
1. Найти сумму эле- |
список из тех элементов |
целых чисел, входящих в |
ментов данного списка, |
списка [7, 1, 3, 8, 5, 4, 2], |
список [6, 6, 5, 5, 4, 3, 2, 2, |
которые стоят на не- |
которые стоят на пози- |
1] только один раз. Список |
четных позициях. Спи- |
циях, кратных трем. |
упорядочен по убыванию. |
сок [5, 1, 3, 7, 8, 4]. |
2. Определить, входят |
2. Найти наименьший эле- |
2. Найти число вершин |
ли элементы 1 и 4 в де- |
мент дерева. |
дерева, являющихся |
рево. |
|
листьями. |
|
|
|
16. |
17. |
18. |
|
|
|
1. Определить, является |
1. Сформировать новый |
1. Подсчитать количе- |
ли список симметрич- |
список из тех элементов |
ство целых чисел, вхо- |
ным. |
списка [9, 3, 2, 7, 6, 5, 1], |
дящих в список [7, 7, 6, |
2. Определить, сколько |
которые стоят на позици- |
6, 5, 4, 3, 2, 1] только |
элементов дерева нахо- |
ях, кратных двум. |
один раз. Список упо- |
дятся на 3-м уровне. |
2. Определить, входят ли |
рядочен по возраста- |
|
элементы 2 и 5 в дерево. |
нию. |
|
|
2. Найти наибольший |
|
|
элемент дерева. |
|
|
|
|
12 |
|
19. |
20. |
21. |
|
|
|
1. Найти сумму элемен- |
1. Определить максималь- |
1. Найти третий по ве- |
тов данного списка, ко- |
ный элемент списка чисел |
личине элемент списка |
торые стоят на четных |
[6, 3, 7, 9, 4, 1]. |
чисел [5, 1, 3, 7, 8, 4]. |
позициях. Список [5, 1, |
2. Определить, сколько |
2. Определить, сколько |
3, 2, 2, 9]. |
уровней у дерева. |
элементов дерева |
2. Вычислить среднее |
|
находится на 1 и 2 |
арифметическое всех |
|
уровне дерева. |
листьев дерева. |
|
|
22. |
23. |
24. |
|
|
|
1. Сформировать новый |
1. Подсчитать количество |
1. Найти сумму эле- |
список из тех элементов |
целых чисел, входящих в |
ментов данного списка, |
списка [4, 6, 3, 7, 2, 5, 1], |
список [7, 7, 6, 6, 5, 4, 3, |
которые стоят на не- |
которые стоят на пози- |
2, 1], и вывести повторя- |
четных позициях. Спи- |
циях, не кратных двум. |
ющиеся. Список упоря- |
сок [3, 6, 2, 5, 4, 7]. |
2. Определить, входят |
дочен по убыванию. |
2. Вычислить среднее |
ли элементы 1 и 3 в де- |
2. Найти наименьший |
арифметическое всех |
рево. |
элемент дерева. |
листьев дерева на 2-м |
|
|
уровне. |
Лабораторная работа № 3
Граф. Связность. Длина пути
Порядок выполнения работы:
В соответствии с вариантом написать программу нахождения пути между вершинами и определить, является ли граф связным.
Варианты лабораторных заданий
1. |
2. |
3. |
4. |
5. |
6 |
13
7. |
8. |
|
9. |
|
|
|
|
10. |
11. |
|
12. |
|
|
|
|
13. |
14. |
|
15. |
|
|
|
|
16. |
17. |
|
18. |
|
|
|
|
19. |
20. |
|
21. |
|
|
|
|
22. |
23. |
|
24. |
|
|
|
|
|
|
14 |
|
Лабораторная работа № 4
Трансформация формул
Порядок выполнения работы:
1.Представить заданные формулы (исходную, заменяемую и замещающую) в префиксной форме.
2.Закодировать формулы в виде термов языка ПРОЛОГ.
3.Составить программу на языке ПРОЛОГ для замены одного терма на другой в исходном терме.
4.Осуществить трансформацию исходной формулы.
5.Представить полученную в п.4 формулу в инфиксной форме.
Варианты лабораторных заданий
В исходной формуле заменить подформулу Р на подформулу R.
№ |
Исходная формула F |
Заменяемая |
Замещающая |
|
подформула P |
подформула R |
|||
|
|
|||
|
|
|
|
|
1 |
(x*y/5-z)+x*y*w |
x*y |
x-a*y+1 |
|
|
|
|
|
|
2 |
(x ~(x&y)) ((~y ~(x&y) (x y x&y)) |
~(x&y) |
~x (~y&z) |
|
|
|
|
|
|
3 |
(x z) ((y z) (x y z)) (x y z)) |
A B |
~A B |
|
|
|
|
|
|
4 |
~((x ~(p q)) t&s) |
~(A B) |
~A&~B |
|
|
|
|
|
|
5 |
(x x&y) (x z (x x&y)) |
x x&y |
x z |
|
|
|
|
|
|
6 |
~((x z)&(x y))&(~(x&z) t&u) |
~(A&B) |
~A ~B |
|
|
|
|
|
|
7 |
(a>b a=1)&(d 100 f=q&(a>b a=1) |
a>b a=1 |
p-1=2*q |
|
|
|
|
|
|
8 |
(x&y z x) (z (y&z x)) |
A B |
(A B)&(B A) |
|
|
|
|
|
|
9 |
x|z y x|(z x|y y) |
A|B |
~A ~B |
|
|
|
|
|
|
10 |
a*x 4+b*x 3+c*x 2+d*x+e |
A B |
B*A (B-1) |
|
|
|
|
|
|
11 |
(x y)&(a b&(z w)) |
A&(B C) |
A&B A&C |
|
|
|
|
|
|
12 |
p&q a&b&(c x&y) |
A B&C |
(A B)&(A C) |
|
|
|
|
|
|
13 |
(~ (p q) (~p&q)*r|~p |
~A&B |
A ~B |
|
|
|
|
|
|
14 |
~ (((~p q) (p^r))&(p r)) |~q |
~(A&B) |
~A ~B |
|
|
|
|
|
|
15 |
(x*y-z/w)+x*y*z/w |
z/w |
x-a*y-3 |
|
|
|
|
|
|
|
15 |
|
|
16 |
(~x z) (( ~y z) (x ~y c)) (x ~y z)) |
~A B |
A B |
|
|
|
|
17 |
(z z&y)->(x z (y y&x)) |
A A&B |
A B |
|
|
|
|
18 |
a*x 8-b*x 7+c*x 6+d*x-10 |
A B |
B/(A (B+1)) |
|
|
|
|
19 |
(x (y&z) x) & (z (y&z x)) |
(A B)&(B A) |
A B |
|
|
|
|
20 |
(x ~(x&y)) ((~y ~(x&y) (x y x&y)) |
~(A&B) |
~A ~B |
|
|
|
|
21 |
~((x (p~&~q) t&s) |
~A&~B |
~(A B) |
|
|
|
|
22 |
~p q ~a&b&(c ~x y&p) |
A B |
~A B |
|
|
|
|
23 |
~x ~z y ~x ~ (z ~x ~y y) |
~A ~B |
A|B |
|
|
|
|
24 |
a*x 4+b*x 3+c*x 2+d*x+e |
B*A |
A (n-1)|B |
|
|
|
|
Примечания: В данной таблице приняты следующие обозначения.
1)Большими буквами A и B обозначены подформулы;
2)Знак обозначает логическую функцию «эквивалентность»;
3)знак | обозначает логическую функцию Шеффера;
4)Знак ~ обозначает логическую функцию отрицания;
5)Знак означает логическую функцию «импликация»;
6)Знак означает арифметическую операцию возведения в степень;
7) Старшинство операций (в порядке убывания): а) отрицание; б) конъюнкция, функция Шеффера; в) дизъюнкция; г) импликация.
Подписано в печать 20.06.2016г. Формат 60х90 1/16. Объём 1,0 усл.п.л. Тираж 50 экз. Изд. № 46. Заказ 78.
ООО «Брис-М». Москва, ул. Авиамоторная, д. 8а.
16
