Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык программирования SWI-Prolog. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
830 Кб
Скачать

остановка( 1,'Ост_01'). остановка( 2,'Ост_02'). остановка( 3,'Ост_03'). остановка( 4,'Ост_04'). остановка( 5,'Ост_05'). остановка( 6,'Ост_06'). остановка( 7,'Ост_07'). остановка( 8,'Ост_08'). остановка( 9,'Ост_09'). остановка(10,'Ост_10').

маршрут(1, [1,6,3,4,8]). маршрут(2, [2,5,7,9,10]). маршрут(3, [2,3,6,10]).

Определить:

а) есть ли общие остановки на маршрутах N1 и N2; если есть, то вывести их названия;

б) находятся ли остановки с номерами X и Y на одном маршруте.

Задание 2. Данные о днях рождения сотрудников предприятия представлены в виде (НомерСотрудника, ФИО, Год, Месяц, День).

сотрудник(112, 'Иванов', 1950,10,1). сотрудник( 93, 'Николаев', 1945,4,12). сотрудник(221, 'Петрова', 1991,4,21). сотрудник( 193, 'Кузнецов', 1945,4,12).

Определить:

а) сколько сотрудников родилось в N-ном месяце;

б) данные о самом старшем сотруднике(или самых старших, если их несколько).

Задание 3. Ориентированный граф задан списком ребер. Ребро задаётся начальной и конечной вершинами и длиной соединяющего их ребра :

ребро(a1,a2,120). ребро(a1,a3,100). ребро(a2,a3,70).

ребро(a2,a4,90). ребро(a3,a1,100). ребро(a3,a5,150). ребро(a4,a6,40). ребро(a5,a4,100).

81

ребро(a6,a2,60). ребро(a6,a7,130). ребро(a7,a5,120).

Найти все пути из одной заданной вершины в другую. Вычислить и вывести длины этих путей.

Задание 4. Имеются результаты сессии группы студентов, включающие номер зачётки, фамилию и оценки по трём экзаменам– информатике, линейной алгебре и физике.

оценки(101,'Артамонов',5,4,4).

оценки(102,'Харчев',3,2,3).

оценки(103,'Кузнецова',4,5,5).

оценки(104,'Иванова',5,4,4). оценки(105,'Николаев',3,3,4). оценки(106,'Конышев',3,3,3). оценки(107,'Брянцев',5,5,5). оценки(108,'Петрова',5,4,5).

Необходимо:

а) для каждого студента вывести его рейтинг– сумму полученных им оценок;

б) по каждому экзамену подсчитать среднюю оценку.

Задание 5. Имеется база данных нескольких европейских государств с данными: государство, столица, площадь (кв. км), численность (чел.) и плотность населения.

страна('Австрия',

'Вена',

83879,

8711770,

102.1).

страна('Бельгия',

'Брюссель',

30528, 11358952,

368.3).

страна('Болгария','София',

10993.6,

7101859,

63).

страна('Великобритания','Лондон',243809,63395574,246).

страна('Германия','Берлин',

357021, 82175684,

227).

страна('Греция', 'Афины',

131957, 10955000,

85.3).

страна('Испания', 'Мадрид',

505990, 46468102,

92).

страна('Италия', 'Рим',

301340, 60795612,

201.1).

страна('Норвегия','Осло',

385186, 5305000,

13.1).

страна('Россия',

'Москва', 17125191,146804372,

8.56).

страна('Франция', 'Париж',

674685, 66991000,

103).

страна('Швеция',

'Стокгольм',447435, 10042928,

21.89).

82

Требуется:

а) вывести все страны, площадь которых больше 400 тысяч кв. км; б) вывести названия и плотность населения тех стран, население кото-

рых менее 10 миллионов человек.

Задание 6. Имеется список товаров в формате товар(Название, Вес, Цена) и список покупок, элементами которого являются подсписки в формате [НазваниеТовара, Количество]. Вес единицы товара указывается в килограммах, а цена – в рублях. Атрибут Количество для некоторых товаров (например, для сыра) может быть дробным.

Необходимо:

а) вычислить общую сумму купленных товаров; б) среди всех товаров найти товар (товары) с минимальной стоимостью

единицы (кг) товара. Пример списка товаров:

товар(хлеб, 0.4, 29.90). товар(батон, 0.35, 29.90). товар(молоко, 0.9, 53.70). товар(творог, 0.5, 107.20). товар(сыр, 1, 620.00).

Пример списка покупок: L = [[хлеб,2], [сыр,0.5], [молоко,1]]

Задание 7. В базе данных хранятся значения уличной температуры за несколько дней в формате температура(Дата, СписокЗначений). В списке значений приведены значения температуры, полученные утром, днём, вечером и ночью указанной даты.

температура('08.10.2018', [8, 12, 10, 4]). температура('09.10.2018', [6, 12, 14, 3]). температура('10.10.2018', [4, 8, 10, 2]).

температура('11.10.2018', [6, 16, 14, 4]). температура('12.10.2018', [2, 6, 8, 3]). температура('13.10.2018', [0, 2, 4, 1]). температура('14.10.2018', [1, 2, 3, 0]).

Требуется:

а) определить, в какие дни средняя температура суток была не меньше восьми градусов по Цельсию;

83

б) определить самый тёплый день (по дневной температуре); в) определить самую холодную ночь (по ночной температуре).

Задание 8. В базе данных хранится информация о размерах нескольких коробок в формате коробка(Номер, [Длина, Ширина, Высота]).

коробка(1, [12,45,34]).

коробка(2, [20,15,71]).

коробка(3, [13, 8,17]).

коробка(4, [56,11,28]).

коробка(5, [ 6,13,10]).

коробка(6, [75,37, 6]).

Написать предикаты:

а) для вычисления объёма коробки с заданным номером; б) для получения размеров коробки максимального объёма; в) для получения размеров коробки минимального объёма; г) для вычисления суммарного объёма всех коробок.

Задание 9. В скольких точек Y-координата):

базе данных приведена информация о координатах - не на плоскости OXY в формате точка(Номер, X-координата,

точка(1, 320, 208).

точка(2, 172, 105).

точка(3, 94, 318).

точка(4, 227, 193).

точка(5, 77, 261).

точка(6, 114, 218).

точка(7, 150, 98).

точка(8, 254, 100).

Написать предикаты:

а) для вычисления расстояния между двумя точками, задаваемыми своими номерами;

б) для нахождения двух наиболее удалённых друг от друга точек; в) для нахождения двух ближайших точек;

г) для получения списка номеров точек, попавших в круг, заданный координатами центра и радиусом.

84

Задание 10. В базе данных хранится информация о вкладчиках банка. Формат данных:

вкладчик(Код, Фамилия, СписокСчетов) счёт(Номер, Сумма)

Данные:

вкладчик(1,'Борзов', [18, 75, 391]).

вкладчик(2,'Иванова', [162, 163]).

вкладчик(3,'Корнев', [391, 455, 456]).

счёт(391, 320121).

счёт(213, 721050).

счёт(455, 948318).

счёт(456, 52276).

счёт( 75, 777261).

счёт(162, 114218).

счёт(163, 15098).

счёт( 18, 254100).

Необходимо:

а) вычислить сумму денег, хранящихся на счетах каждого вкладчиках; б) определить, кому принадлежит счёт с максимальной суммой денег; в) определить, кому принадлежит счёт с минимальной суммой денег.

Задание 11. В базе данных хранится информация о нескольких ломаных в формате ломаная(Номер, СписокТочек), где СписокТочек есть номера точек, которые являются последовательными вершинами ломаной.

ломаная(1, [3,6,7,8]).

ломаная(2, [1,5,3,4]).

ломаная(3, [2,4,1,6]).

ломаная(4, [4,3,2,5]).

Точки задаются в виде точка(Номер, X-координата, Y-координата):

точка(1, 320, 208). точка(2, 172, 105). точка(3, 94, 318). точка(4, 227, 193). точка(5, 77, 261).

85

точка(6, 114, 218). точка(7, 150, 98). точка(8, 254, 100).

Написать предикат для вычисления длины заданной ломаной. Пользуясь этим предикатом, вычислить длины всех ломаных.

Задание 12. В базе данных хранится информация о преподавателях вуза в формате

преподаватель(ТабельныйНомер, ФИО, Должность, Оклад) кафедра(Код, Название, ЗавКафедрой, СписокСотрудников)

Здесь атрибуты ЗавКафедрой и СписокСотрудников содержат табельные номера заведующего кафедрой и остальных преподавателей.

Требуется:

а) для каждой кафедры вывести ФИО и должности заведующегока федрой и всех её преподавателей;

б) для каждой кафедры подсчитать месячный фонд оплаты труда(т. е. сумму окладов заведующего кафедрой и всех её преподавателей.

Исходные данные:

преподаватель(1201, 'Андреев', 'доцент', 45000). преподаватель(2592, 'Николаев', 'доцент', 40000). преподаватель(4123, 'Костина', 'ассистент', 20000). преподаватель(3122, 'Петровский', 'профессор', 60000). преподаватель(2006, 'Бахтин', 'доцент', 45000). преподаватель(7120, 'Яшкова', 'профессор', 70000). преподаватель(1884, 'Никитин', 'ассистент', 25000).

кафедра(1, 'ПМиИ', 3122, [1201, 4123, 1884]). кафедра(2, 'ВТ', 7120, [2592, 2006]).

Задание 13. В базе данных хранится информация о людях, которые являются друзьями.

друзья('Сергей', 'Валера'). друзья('Сергей', 'Николай'). друзья('Пётр', 'Николай').

86

друзья('Пётр', 'Виктор'). друзья('Иван', 'Аркадий'). друзья('Иван', 'Михаил').

друзья('Аркадий', 'Михаил'). друзья('Аркадий', 'Степан').

Необходимо:

а) вывести список людей, который дружат с конкретным человеком; б) получить список всех людей, упомянутых в базе данных;

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

Задание 14. В базе данных хранится расписание поездов из Самары в Москву. Время отправления и время прибытия на следующий день указано московское в формате [часы, минуты].

поезд('131У',[11,42],[09,38]). поезд('049Й',[14,24],[05,45]). поезд('013У',[15,47],[06,22]). поезд('031У',[18,13],[10,29]). поезд('009Й',[18,50],[07,53]). поезд('017Щ',[19,04],[11,15]). поезд('083Ц',[22,35],[15,27]).

Требуется:

а) для каждого поезда вычислить время в пути в формате«часы, минуты», причем 0 <= минуты <= 59;

б) вывести список поездов, которые прибывают в Москву не позже половины десятого утра.

Задание 15. В базе данных хранятся результаты сравнения пар объектов

(less(X,Y) истинен, если X < Y):

less(a,b). less(c,f). less(d,e). less(a,d). less(c,h). less(e,h). less(b,d). less(g,h).

87

Написать предикат, который сравнивает два произвольных объекта. Используя этот предикат, получить список объектовY, для которых известно, что a < Y и Y < h.

Задание 16. В базе данных представлена информация о результатах игр по футболу в группе А чемпионата мира – 2018.

игра('Россия', 'Саудовская Аравия', 5, 0). игра('Египет', 'Уругвай', 0, 1). игра('Россия', 'Египет', 3, 1). игра('Уругвай', 'Саудовская Аравия', 1, 0). игра('Саудовская Аравия', 'Египет', 2, 1). игра('Уругвай', 'Россия', 3, 0).

Написать предикат, который для выбранной команды определяет число побед, ничьих, поражений и количество набранных очков. Набранные очки вычисляются по формуле «3*число побед + число ничьих».

Задание 17. В базе данных хранится информация о количестве воды в бочках в формате: объём_воды(Номер_бочки, Объём_бочки, Количество_воды).

объём_воды(1,200,140). объём_воды(2,200, 97). объём_воды(3,200,180). объём_воды(4,120,120). объём_воды(5,120, 70).

Необходимо:

а) написать предикат, который вычисляет общий объём свободного пространства в бочках;

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

Задание 18. В базе данных хранится информация о книгах и читателях библиотеки.

Формат описания книги: книга(Автор, Название, Инвентарные_номера)

Формат описания читателя: читатель(Фамилия, Взятые_книги). Взятые_книги есть список инвентарных номеров книг, выданных дан-

ному читателю.

88

книга('Л.Н.Толстой','Война и мир',[197,198,203]). книга('М.Ю.Лермонтов','Герой нашего времени',[37,39]). книга('К.И.Чуковский','Доктор Айболит',[19,20,21,25]). книга('Н.В.Гоголь','Вечера на хуторе близ Диканьки', [91,94,95]).

книга('П.П.Бажов','Уральские сказы',[129,131,142]). читатель('Иванов', [197,20]).

читатель('Николаева', [19,95]). читатель('Яковлев', [129,37]). читатель('Цветкова', [142]). читатель('Диков', [94,21]).

Требуется:

а) написать предикат, который для данного читателя выводит список имеющихся у него книг с указанием автора и названия книги;

б) для каждой книги определить, сколько экземпляров этой книги имеется в библиотеке (с учётом выданных читателям)

Задание 19. Дан список векторов в трехмерном пространстве:

vector(3,0,9). vector(4,-1,5). vector(3,5,7). vector(-2,1,0). vector(7,-2,7).

Вывести те из них, которые образуют прямой угол с вектором [3, 7, -1].

Задание 20. В базе данных хранится пронумерованный набор из девяти числовых троек в формате N, A, B, C, где N – номер тройки, A, B, C – значения элементов. Все значения – целые числа из диапазона 1…9:

group(1,1,2,3). group(2,1,4,5). group(3,1,6,9). group(4,2,7,8). group(5,2,8,9). group(6,3,4,5). group(7,3,7,8). group(8,4,5,6). group(9,6,7,9).

89

Необходимо выбрать три тройки так, чтобы среди полученных девяти значений были все целые числа от 1 до 9 включительно.

2.6. Логические задачи

Задание 1. Света, Марина, Андрей, Кирилл и Юра держат домашних животных. У каждого либо кошка, либо собака, либо попугай. Девочки не держат собак, а мальчики попугаев. У Светы нет кошки. У Светы и Марины разные животные. У Марины и Андрея – одинаковые. У Андрея и Кирилла – разные. У Кирилла и Юры – одинаковые. Определите, у кого какое животное живёт.

Задание 2. Четыре друга – Владимир, Андрей, Александр и Михаил – решили отдохнуть на Канарских островах. Поехав на остров Тенерифе, они все поселились в разных отелях: «Тропикаль», «Конкордия», «Флорида» и «Ла Паз».

Известно, что:

1)Владимир проводил своих друзей в отель«Ла Паз» и отель «Тропикаль»;

2)человек, поселившийся в отеле «Ла Паз», – лучший друг Андрея;

3)житель отеля «Флорида» встречается с Владимиром и Михаилом у

моря;

4)Андрей приходит обедать в отель «Флорида» к своему товарищу.

Кто в каком отеле живет?

Задание 3. Саша надумал навести порядок в своих книгах и обнаружил, что пяти книг не хватает: тома рассказов Марка Твена, книги «Энциклопедия профессора Фортрана», сборника сказок Андерсена, рассказов Бианки и сборника стихов Пушкина.

Саша смутно помнил, что кому-то давал эти книги. Но кому? Саше удалось вспомнить следующее:

1)он давал книги только Андрею, Феде, Ире, Кате и Вале;

2)он всегда строго придерживался правила давать друзьям только по одной книге, причем следующую книгу давал только после того, как ему возвращали предыдущую;

90

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]