19

Использование отсечения в пролог-программах. Определение возрастного статуса человека

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2012-11-17

34.73 KB

44 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И РОБОТОТЕХНИКИ

Кафедра «Программное обеспечение вычислительной техники и

автоматизированных систем»

ОТЧЁТ

по лабораторной работе №5

к дисциплине

«Функциональное и логическое программирование»

Тема: «ИСПОЛЬЗОВАНИЕ ОТСЕЧЕНИЯ В ПРОЛОГ-ПРОГРАММАХ» 

Выполнили:  ст.  гр. 107310 Абросимова С.А., Синькевич Я.А.

Приняла: Ковалькова И.А.

 

2011-2012 учебный год

ЛАБОРАТОРНАЯ РАБОТА

ИСПОЛЬЗОВАНИЕ ОТСЕЧЕНИЯ В ПРОЛОГ-ПРОГРАММАХ

Цель лабораторной работы: приобретение  практических навыков использования отсечения в программах на Турбо-Прологе.

Постановка задачи:

Определить возрастной статус человека по известному году рождения в соответствии с таблицей. Разработать два варианта программы: без отсечения и с использованием отсечения.

Возраст, лет

Статус

< 2

Младенец

2 – 12

Ребенок

12 – 16

Подросток

16 – 25

Юноша

25 – 70

Мужчина

70 – 100

Старик

> 100

долгожитель

Результаты лабораторной работы:

Рисунок 1 – Результат работы программы

Контрольные вопросы:

  1.  Для чего используется отсечение?

Ответ: Они существуют для ограничения или исключения перебора в программе, для программировании взаимоисключающих утверждений, для необходимости неудачного завершения доказательства цели.

  1.  Как обозначается отсечение в программе?

Ответ: !.

  1.  Механизм работы отсечения.

Ответ: Отсечение реализуется следующим образом: после согласования целевого утверждения, стоящего перед отсечением, все предложения с тем же предикатом, расположенные после отсечения, не рассматриваются.

  1.  «Красное» и «зеленое» отсечения.

Ответ: Зелеными называются те из них, при отбрасывании которых программа продолжает выдавать те же решения, что и при наличии отсечения. Если же при устранении отсечений программа начинает выдавать неправильные решения, то такие отсечения называются красными.

  1.  Какое отсечение, «красное» или «зеленое» , в процедуре max2 ?

Ответ: «красное».

  1.  Повлияет ли на результат удаление отсечения в процедуре max2 ?

Ответ: Да, повлияет.

  1.  Что происходит после выполнения комбинации !, fail?

Ответ: когда встретится предикат fail, который всегда вызывает состояние неудачи, то стоящий перед ним предикат отсечения остановит работу механизма возврата и в результате ответом на запрос будет No Solution (Нет решения).

  1.  Могут ли располагаться подцели после предиката fail ?

Ответ: нет.

  1.  Декларативный и процедурный смысл Пролог-программы.

Ответ: так называемый декларативный стиль, в котором программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию. Программируя в декларативном стиле, программист должен описать, что нужно решать. Традиционно под программой понимают последовательность операторов (команд, выполняемых компьютером). Этот стиль программирования принято называть процедурным.

  1.  Важен ли порядок следования предложений в процедурах max1 и max2 ?

Ответ: нет, не важен.

Выводы:

Приобрели практические навыки, научились использовать отсечения на языке пролог.


ПРИЛОЖЕНИЕ

Листинг исходного кода программы:

predicates

nondeterm voz( integer, integer, string).

nondeterm result.

clauses

voz(X,Y,"младенец") :- X=2012-Y, X<2, !.

voz(X,Y,"ребёнок") :-X=2012-Y, X<12, !.

voz(X,Y,"подросток") :- X=2012-Y,X<16, !.

voz(X,Y,"юноша") :- X=2012-Y,X<25, !.

voz(X,Y,"мужчина") :-X=2012-Y, X<70, !.

voz(X,Y,"старик") :- X=2012-Y,X<100, !.

voz(X,Y,"долгожитель") :-X=2012-Y, X>100, !.  

result :- write("Введите год рождения: "), nl, readint(Y), voz(_,Y,Z), write("Данный возраст соответствует группе  ", Z), nl.

goal

result.

/*

predicates

nondeterm voz( integer,integer, string).

nondeterm result.

clauses

voz(X,Y,"младенец") :- X=2012-Y, X<2.

voz(X,Y,"ребёнок") :-X=2012-Y, X<12, X>2.

voz(X,Y,"подросток") :- X=2012-Y,X<16, X>12.

voz(X,Y,"юноша") :- X=2012-Y,X<25, X>16.

voz(X,Y,"мужчина") :-X=2012-Y, X<70, X>25.

voz(X,Y,"старик") :- X=2012-Y,X<100, X>70.

voz(X,Y,"долгожитель") :-X=2012-Y, X>100.  

result :- write("Введите год рождения: "), nl, readint(X), voz(X,Y), write("Данный возраст соответствует группе  ", Y), nl.

goal

result. */


 

А также другие работы, которые могут Вас заинтересовать

22001. Франкское государство 82.5 KB
  Военные предводители франков короли герцоги завоевали земли от Рейна до Соммы затем между Сеной и Луарой продвигаясь к югу вытеснили готов за Пиренеи. Так же была размещена и общая для всей деревни площадь пахотной земли которая в свою очередь делилась на различные поля так называемые геванны или коны по качеству почвы. Хлодвиг присвоил себе земли бывшего императорского фиска. Его преемники прихватили все свободные земли бывшие достоянием общины.
22002. Франция в XI-XV вв. 269.5 KB
  Серв получал свободу только через отпуск для чего требовалась еще и санкция вышестоящего сеньора или короля. должность графа равно как и прочие бенефиции полученные от короля становилась наследственным достоянием их обладателей. на дворянский отряд осуществлявший в Бовези реквизицию продуктов у крестьян стали осаждать рыцарские замки сжигать или захватывать поместья было разрушено не менее 100 замков или домов уничтожать списки повинностей и требовать истребления всех дворян кроме короля. Города разными путями добивались...
22003. Франция в XVI-XVIII вв. 183 KB
  Во Франции в XVIXVII вв. Парижский бассейн самая развитая область Франции урожайность 15 цт с 1 га сам5; на юге чуть ниже; трехполье; для сравнения урожайность в Англии составляла 13 цт с 1 га. в некоторых местностях Северной Франции появилась новая форма аграрных отношений краткосрочная аренда более или менее крупных земельных комплексов. климат характеризуется потеплением и преобладанием урожайных лет над неурожайными а война велась вне пределов Франции и сопровождалась умеренным ростом налогов.
22004. Україна у складі Російської та Австро-Угорської імперій (кінець ХVІІІ – початок ХХ ст.) 56 KB
  Український суспільно-політичний рух опирався не тільки на внутрішні джерела, а й на зовнішні чинники. Йдеться, зокрема, про відчутний вплив на цей рух Французької революції, зокрема її концепції вільної нації.
22005. Чехия в XI-XV вв. 127.5 KB
  Леса хвойные Чехии смешанные Словакия. В Чехии со второй четверти XII в. конец династии Пшемысловичей борьба за престол и утверждение в Чехии Люксембургов 1310 г. Во главе деревни стоял наследственный староста в Чехии рижстарж в Польше солтыс войт.
22006. Швейцария в XVI в. 52.5 KB
  Торговля содействовала развитию кредита так как Цвингли и Кальвин отвергли запрет . Ульрих Цвингли 14841531 сын сельского старосты окончил латинскую школу в Берне в Базельском и Венском университетах связан с Эразмом магистр свободных искусств увлекался гуманистическими штудиями. У Цвингли не было ничего из мистического созерцания Лютера. Цвингли свои взгляды изложил в 67 тезисах 1523 г.
22007. Япония в III-VIII –XII вв. 64 KB
  Заселение овов Японии началось давно. в Японии образовался племенной союз занимавший ов Кюсю или по мнению других южную часть ова Хонсю провинции Ямато Коти Эцу. По синтоизму японская нация ведет свое происхождение от богиги Солнца Аматэрасу потомком которой был легендарный император Японии Дзиммутэнно 660 г. Особенность исторического развития Японии состоит в том что первобытнообщинный строй трансформировался в феодальный минуя рабовладельческий.
22008. Япония в XIV-XVI вв. 78 KB
  Таким образом появление новой сёгунской династии не означало централизации страны. Вся остальная часть страны находилась в руках местных феодалов. Посевы хлопчатника до этого сеяли эту культуру только в южной части страны появились и в восточной части страны. Встал вопрос об объединении страны.
22009. Международные отношения в средние века. Итальянские войны 116.5 KB
  Примером является империя Карла V. Таким образом накануне похода Карла VIII Италия разделилась на 2 лагеря Милан Венеция Рим с одной стороны и Неаполь Флоренция с другой. Флорентийцы восстали и изгнали Медичи Флоренция встретила Карла VIII не как завоевателя а как союзника хотя и пришлось выполнить ряд тяжелых условий выплатить 120. Задача флорентийского правительства Пьетро Каппони видело главную задачу в том чтобы скорее выпроводить Карла VIII из Флоренции и из Тосканы.