Управление выводом в Прологе. Простейшие рекурсивные программы.
В данной лабораторной работе мы приступаем к изучению языка Пролог – языка логического программирования. Язык Пролог является декларативным языком, то есть «описательным». Программа на Прологе чаще всего представляет собой совокупность знаний о некоторых объектах предметной области. Основной программной единицей Пролога является предикат – функция, аргументами которой являются объекты, и которая возвращает логическое значение. Предикаты бывают двух основных типов – факты и правила.
Задание на лабораторную работу 5.
Замечания.
- В задании 1 в требование в форме «найти сочетание какого-нибудь одного свойства » означает, что программа должна сама находить любое существующее в базе свойство. Нельзя задавать его в виде константы (Х=”белый”) или вводить с клавиатуры.
- Задание 2 на использование отсечения (это не значит, что в остальных заданиях отсечения не используется, в большинстве вариантов необходимо его использовать во всех заданиях). При сдаче необходимо устно объяснить, является ли отсечение красным или зеленым.
- Задание 3 – должен быть рекурсивный предикат.
Вариант 1
1. Имеется 3 пишущих принадлежности: ручка, карандаш и маркер. Есть 4 различных цвета – черный, синий, фиолетовый и красный. Написать программу, которая находит
а) все сочетания пишущих принадлежностей и цветов
б) сочетания всех пишущих принадлежностей и какого-нибудь одного цвета
|
|
в) все сочетания, исключая фиолетовый маркер.
2. Написать программу проверки существования треугольника с тремя заданными сторонами.
3. Вычислить сумму нечетных чисел заданного отрезка целых чисел.
Вариант 2
1. Алсу, Борис, Владимир и Глеб решили приобрести домашнего питомца. В зоомагазине им предложили хомячка, попугая, рыбок, котенка и морскую черепаху. Алсу решила купить млекопитающее, Борис заявил, что у него нет денег на аквариум, Владимир решил купить двух питомцев, но таких, что не едят друг друга, а Глеба устраивал любой из предложенных питомцев. Найдите все варианты «хозяин-питомец» для ребят с учетом указанных предпочтений.
2. Написать программу, печатающую социальный статус человека в зависимости от возраста.
3. Вычислить заданную целую степень целого числа, используя только операцию умножения.
Вариант 3
1. Имеется 4 марки машин(определить самостоятельно), 3 варианта цвета – черный, белый, красный и 2 варианта комплектации – обычный и люкс. Написать программу, которая находит
а) все сочетания марок, цветов и комплектации
б) сочетания машин комплектации люкс какого-нибудь одного цвета
в) все сочетания, при условии, что первая из марок машин не имеет обычной комплектации, а машины комплектации люкс не бывают черного цвета
|
|
2. Написать предикат, проверяющий, что все три его аргумента – разные числа.
3. Определить остаток от деления двух целых чисел, используя из арифметических только операцию разности.
Вариант 4
1. Имеются 4 девушки и 3 юношей (имена придумать самостоятельно). Танцевать могут либо девушка с юношей, либо девушка с девушкой (но не сама с собой). Написать программу, находящую все возможные пары.
2. Найти среднее из трех заданных целых чисел.
3. Вычислить четный полуфакториал заданного числа.
Вариант 5
1. Имеется 3 вещи из гардероба – туфли, платье и шляпа и 4 цвета – белый, красный, зеленый и черный. Написать программу, находящую
а) все сочетания 3 вещей и цветов
б) все сочетания, в которых туфли и шляпа должны быть одного цвета
2. Написать программу, выводящую по заданному целому числу это число и слово «яблоко», согласованное с числом. («2 яблока», «8 яблок» и т.д.)
3. Вычислить произведение всех чисел, кратных 3, не превышающих заданного числа.
Вариант 6
1. Имеется 3 вида напитков – сок, кофе и чай, 2 вида первых блюд – суп и пельмени, 3 вида вторых – плов, шницель и гуляш. Ваня сказал «Я возьму первое, второе и напиток», Маша – «Я хочу горячий напиток, пельмени и второе кроме плова», Руслан – «Я хочу сок и какое-нибудь второе или чай и какое-нибудь первое блюдо». Напишите программу, находящую все варианты меню для каждого из ребят.
|
|
2. По заданной дате (число и месяц) определить номер школьной учебной четверти или вид каникул.
3. Найти НОД двух целых чисел, используя алгоритм Евклида.
Вариант 7
1. В базе данных имеются записи о девушках в виде фактов девушка(имя, рост, цвет_волос, страна) (придумать базу самостоятельно). Майкл желает познакомиться с блондинками не выше 175 см, Филу нравятся только девушки по имени Мария, а Бобу нужна 1 любая уроженка Франции выше 160 см. Напишите программу, находящую нужных девушек согласно предпочтениям.
2. Проверить, являются ли 3 заданные числа сторонами равнобедренного треугольника.
3. Проверить, является ли заданное число степенью тройки, находя степени тройки до тех пор, пока не произойдет совпадения или превышения заданного числа.
Вариант 8
1. Имеются 4 вида драгоценных камней : алмаз, рубин, изумруд и сапфир. Каждый камень можно огранить 1 из четырех способов – роза, кабошон, таблица или трапеция. Напишите программу, находящую
|
|
а) все сочетания вида камень-огранка
б) сочетание какого-либо камня со всеми огранками, кроме таблицы
в) все сочетания, в которых рубин огранен только кабошоном или таблицей.
2. Найти разность между максимальным и минимальным числом из трех заданных.
3. Найти число сочетаний для двух заданных чисел .
Вариант 9
1. Имеется 4 вида цветов – розы, гвоздики, астры и лилии, из них розы и лилии являются сильнопахнущими. Лилии бывают только белыми, остальные белыми, красными или розовыми. Напишите программу. находящую
а) все виды цветов
б) какой-то сильнопахнущий вид цветов розового цвета.
2. Написать программу, выводящую по заданному целому числу это число и слово «пингвин», согласованное с числом. («3 пингвина», «11 пингвинов» и т.д.)
3. Вычислить нечетный полуфакториал заданного числа.
Вариант 10
1. Имеются результаты матчей по волейболу – выигрыш, проигрыш или ничья для команд ФИРТа, ФАДа, АТС и ИНЭК (результаты придумать самостоятельно). Проверить, есть ли среди команд
а) выигравшие все матчи
б) не проигравшие ни одного матча
2. Проверить, есть ли среди 4 заданных чисел равные.
3. Найти сумму всех натуральных чисел, кратных 5, не превышающих заданного числа.
Пример выполнения работы
1. Имеется три вида материала – бязь, сатин и поплин, и три вида изделий – простыня, наволочка и пододеяльник. Написать программу, которая находит
а) все сочетания материалов и изделий
б) сочетания какого-нибудь изделия и всех материалов
в) все сочетания, если простыня должна быть только из поплина.
Решение:
Пример выполнения:
а) база знаний и цель:
Пример выполнения:
б) база знаний та же самая, покажем предикат для выполнения задания б):
Пример выполнения:
в) база знаний та же самая:
2. Написать программу проверки, что три заданных числа образуют арифметическую прогрессию.
Решение: Три числа будут образовывать арифметическую прогрессию, если выполняется одно из двух условий:
1) разность между первым и вторым равна разности между вторым и третьим (убывающая прогрессия), после этого условия ставим отсечение, так как второе можно уже не проверять;
2) разность между вторым и первым равна разности между третьим и вторым (возрастающая прогрессия).
3. Найти частное от деления двух чисел, используя только операцию вычитания.
Решение:
В данном задании предполагается из делимого вычитать делитель, до тех пор делимое не станет меньше делителя. Ответом будет количество произведенных операций. Поясним на примере, пусть делимое 30, делитель 7:
30-7=23
23-7=16
16-7=9
9-7=2
Последний результат – 2 меньше 7, заканчиваем процесс, ответом будет 4 – количество произведенных вычитаний.
Наш основной предикат будет иметь три аргумента – два выходных и один для результата. Вспомогательный рекурсивный предикат будет иметь 4 аргумента – текущее делимое, делитель, аккумулятор для подсчета выполненных вычитаний и результат. Базу рекурсии пишем так: если текущее делимое меньше делителя, то переписать значение аккумулятора в результат (это достигается просто использованием одинаковых переменных в заголовке) и закончить процесс – отсечение в этом случае запрещает использовать вторую строку для согласования предиката. Шаг рекурсии – уменьшить значение делимого на величину делителя, увеличить значение аккумулятора на единицу, вызвать рекурсивно предикат с новыми аргументами.
Пример выполнения:
Лабораторная работа №6.
Дата добавления: 2019-03-09; просмотров: 699; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!