33)Отсортируйте список методом пузырька.
34)Отсортируйте список методом вставками.
35)Отсортируйте список быстрым методом сортировки.
36)Используя предикат findall, решите следующие задачи:
1.Вывести самых молодых жильцов дома и номера квартир, в которых они живут.
2.Вывести фамилии студентов и их возраст с максимальным размером стипендии.
3.Вывести фамилии сотрудников предприятия и их оклады, оклады которых меньше среднего.
4.Вывести студентов с заданной фамилией и посчитать их количество.
Рекомендуемая литература
1.Ин Ц., Соломон Д. Использование Турбо-Пролога: Пер. с англ.-
М.:Мир, 1993.-608 с.,ил.
2.Практикум по логическому программированию: Методические рекомендации для студентов и преподавателей по лабораторному практикуму по курсу «Логическое программирование»/ Сост. Р.И. Баженов, И.И. Раскина. – Омск: Изд-во ОГПУ, 1995. – 85 с.
41
Лабораторная работа №5. Решение логических задач. Пример 1. Беседует трое друзей: Белокуров, Рыжов, Чернов.
Брюнет сказал Белокурову: “Любопытно, что один из нас блондин, другой брюнет, третий - рыжий, но ни у кого цвет волос не соответствует фамилии”. Какой цвет волос у каждого из друзей?
Для решения построим вспомогательную таблицу:
Таблица 8.
Вспомогательная таблица соответствия
Цвет Фамилия |
Белокуров |
Рыжов Чернов |
блондин |
- |
|
рыжий |
|
- |
брюнет |
- |
- |
Выводы:
1)Белокуров не брюнет и не блондин;
2)Чернов не черный, цвет волос Чернова и Белокурова не совпадают;
3)Рыжов не рыжий, цвет волос у Рыжова и Белокурова, Рыжова
иЧернова не совпадают.
Predicates fam(symbol) color(symbol)
Программа 23. Логическая задача на соответствие
cootvet(symbol, symbol) Clauses
fam(belokurov). fam(ryzov). fam(chernov). color(ryziy). color(cherniy). color(beliy).
cootvet(X,Y):- fam(X), color(Y), X=belokurov, not(Y=cherniy), not(Y=beliy).
cootvet(X,Y):- fam(X), color(Y), X= chernov, not(Y=cherniy),not(cootvet(belokurov,Y).
cootvet(X,Y):- fam(X), color(Y), X= ryzov,
not(cootvet(belokurov, Y), not(cootvet(chernov, Y).
Пример 2. На скамейке сидели Петя, Боря, Коля. Петя справа от Бори, Боря справа от Коли. Кто сидел посередине? Кто сидел с правого(левого) края? Кто сидел между указанными объектами(увеличьте число объектов)?
Программа 24. Логическая задача на выяснение порядка
42
Predicates
rayd(symbol, symbol, symbol) sprava(symbol, symbol) seredina(symbol kr_cl(symbol)
kr_cpr(symbol) Clauses
sprava(kolya, boray). /*Справа от Коли Боря*/ sprava(boray, petay).
rayd(X,Y,Z):- sprava(X,Y), sprava(Y, Z). seredina(X):- rayd(_,X,_).
kr_cl(X):- rayd(X,_,_). kr_cpr(X):- rayd(_,_,X).
Задания для самостоятельной работы
1)Коля и Саша носят фамилии Шилов и Гвоздев. Какую фамилию носит каждый из них, если Саша с Шиловым живут в разных домах.
2)В соревнованиях по бегу Юра, Гриша и Толя заняли три первых места. Какое место занял каждый ребенок, если Гриша занял не второе и не третье место, а Толя не третье?
3)Три подруги вышли в белом, зеленом и синем платьях и туфлях. Известно, что только у Ани цвета платья и туфлей совпадали. Ни туфли, ни платье Вали не были белыми. Наташа была в зеленых туфлях. Определить цвета платья и туфель на каждой из подруг.
4)На заводе работали три друга: слесарь, токарь и сварщик. Их фамилии Борисов, Иванов и Семенов. У слесаря нет ни братьев, ни сестер. Он самый младший из друзей. Семенов, женатый на сестре Борисова, старше токаря. Назвать фамилии слесаря, токаря и сварщика.
5)В бутылке, стакане, кувшине и банке находятся молоко, лимонад, квас и вода. Известно, что вода и молоко не в бутылке, сосуд с лимонадом находится между кувшином и сосудом с квасом, в банке - не лимонад и не вода. Стакан находится около банки и сосуда с молоком. Как распределены эти жидкости по сосудам.
6)Воронов, Павлов, Левицкий и Сахаров – четыре талантливых молодых человека. Один из них танцор, другой художник, третий-певец, а четвертый-писатель. О них известно следующее: Воронов и Левицкий сидели в зале консерватории в тот вечер, когда певец дебютировал в
43
сольном концерте. Павлов и писатель вместе позировали художнику. Писатель написал биографическую повесть о Сахарове и собирается написать о Воронове. Воронов никогда не слышал о Левицком. Кто чем занимается?
7)Три друга заняли первое, второе, третье места в соревнованиях универсиады. Друзья разной национальности, зовут их по-разному, и любят они разные виды спорта. Майкл предпочитает баскетбол и играет лучше, чем американец. Израильтянин Саймон играет лучше теннисиста. Игрок в крикет занял первое место. Кто является австралийцем? Каким спортом увлекается Ричард?
8)Три девочки Маша, Рита, Лена пошли гулять. На улице было жарко,
иони купили мороженое «Белка», «Стрелка», «Гагара». Какое мороженое купила каждая из девочек, если Лена купила не «Белку» и не «Гагару», а Рита – не «Гагару».
9)В комнате находятся Коля, Света, Оля. Каждый из них сидит на отдельной мебели (кровать, стул, диван). Известно, что Коля сидит не на стуле и не на кровати. Света не сидит на стуле. Кто где сидит?
10)На столе лежат ручка, карандаш, фломастер, красного, синего и зеленого цвета. Известно, что ручка лежит между предметом красного и зеленого цвета. Карандаш либо зеленый, либо синий.
11)Однажды в Артеке за круглым столом оказалось пятеро ребят из Москвы, Санкт-Петербурга, Новгорода, Перми, Томска: Денис, Игорь, Иван, Алеша, Сергей. Москвич сидел между томичем и Сергеем, санктпетербуржец - между Денисом и Игорем, а напротив него сидел пермяк и Иван. Алеша ни разу не был в Санкт-Петербурге, а Денис не бывал в Москве и Томске, а томич с Игорем регулярно переписываются. Определите, кто в каком городе живет каждый из ребят.
12)На улице, встав в кружок, беседует четыре девочки: Аня, Валя, Надя, Галя. Девочка в зеленом платье – не Аня и не Валя - стоит между девочкой
44
в голубом платье и Галей. Девочка в белом платье стоит между девочкой в розовом платье и Валей. Какого цвета платье у каждой из девочек?
13)Трое юношей: Коля, Дима и Юра влюблены в трех девушек: Аню, Лену, Вику. Но эта любовь без взаимности. Коля любит девушку, влюбленную в юношу, который любит Лену. Дима любит девушку, влюбленную в юношу, который любит Вику. Лена не любит Юру.
14)Составить базу знаний по сказке “Репка”. Фактами в этой базе должны быть утверждения типа тянет(X,Y). Составить правила, определяющие: кто первый тянет репку, кто последний тянет реку, кто тянет после бабки, кто тянет на четвертом месте.
15)Даны числа X, Y, Z, T. X меньше Yи меньше T; Y больше Z и больше T; Z больше X и меньше T. В каком порядке расположены эти числа.
16)На одной yлице стоят 5 домов, окpашенных в 5 pазных цветов. В каждом доме живет гpажданин дpyгой стpаны. Каждый из них пьёт свой напиток, курит свои сигареты и содержит своё домашнее животное. Определите, кто из них содержит рыб? Британец живёт в красном доме. У шведа есть собака. Датчанин пьёт чай. Зелёный дом стоит слева от белого и вплотную к немy. Хозяин зелёного дома пьёт кофе. У того, кто курит PallMall, есть птицы. Хозяин желтого дома курит Dunhills. Хозяин среднего дома пьёт молоко. Норвежец живёт в пеpвом доме. Человек, который курит Blends, живёт рядом с хозяином котов. Тот, кто содержит лошадей, живёт pядом с тем, кто кypит Dunhills. Тот, кто курит Blue Master, пьёт пиво. Hемец кypит Prince. Норвежец живёт рядом с синим домом. У того, кто курит Blends, есть сосед, который пьёт водy.
45