Управление выводом в Прологе. Простейшие рекурсивные программы.



 

       В данной лабораторной работе мы приступаем к изучению языка Пролог – языка логического программирования. Язык Пролог является декларативным языком, то есть «описательным». Программа на Прологе чаще всего представляет собой совокупность знаний о некоторых объектах предметной области. Основной программной единицей Пролога является предикат – функция, аргументами которой являются объекты, и которая возвращает логическое значение. Предикаты бывают двух основных типов – факты и правила.

 

Задание на лабораторную работу 5.

Замечания.

  1. В задании 1 в требование в форме «найти сочетание какого-нибудь одного свойства » означает, что программа должна сама находить любое существующее в базе свойство. Нельзя задавать его в виде константы (Х=”белый”) или вводить с клавиатуры.
  2. Задание 2 на использование отсечения (это не значит, что в остальных заданиях отсечения не используется, в большинстве вариантов необходимо его использовать во всех заданиях). При сдаче необходимо устно объяснить, является ли отсечение красным или зеленым.
  3. Задание 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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!