Сборник задач по курсу «Логическое программирование»: Учебное пособие

Страницы работы

Содержание работы

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ОБНИНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ АТОМНОЙ ЭНЕРГЕТИКИ (ИАТЭ)

Факультет кибернетики

А.В. ВАСЯШИН

СБОРНИК ЗАДАЧ

по курсу
«Логическое программирование»

УЧЕБНОЕ ПОСОБИЕ

(Для студентов специальностей 230102, 230201 и направлений 230100, 230200)

Обнинск 2009


УДК 004.4 (076.1)

Васяшин А.В. Сборник задач по курсу «Логическое программирование». Учебное пособие. – Обнинск: ИАТЭ, 2009. – 73 с.

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

Первые четыре лабораторные работы посвящены работе со списками и структурами языка «Пролог» и основным методом решения этих задач является рекурсия. Задачи последнего раздела посвящены работе с базой данных «Пролога», а основным  приёмом  их решения является «вынуждаемый возврат».

Рецензенты: к.т.н. О.А. Мирзеабасов, с.н.с. Г.М. Жердев.

Темплан 2009, поз. 9

© Обнинский государственный технический университет атомной энергетики, 2009. © А.В. Васяшин, 2009.


Предисловие

Все представленные ниже лабораторные работы разбиты на четыре темы. Первые три темы, а именно, «Списки и строки», «Бинарные деревья», «Произвольные структуры» включают в себя наборы задач на основной прием программирования в Прологе – рекурсию. При выполнении работ по этим темам допускается использовать любой тип рекурсии (входящую или исходящую). Последняя тема «Файлы и разделы базы данных» предполагает использование в качестве основного приема программирования «вынуждаемый возврат».

Описание каждой задачи состоит из трех частей:

ü  словесная формулировка задачи;

ü  список аргументов;

ü  примеры запросов к разработанной процедуре в среде интерпретатора и получаемые ответы.

При выполнении лабораторных работ требуется строго выполнять два требования:

ü  нельзя изменять количество и смысл аргументов;

ü  нельзя решать задачу для частных случаев.

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

В примерах запросов все процедуры имеют имя pred. Это не является требованием. Напротив, рекомендуется называть процедуру так, чтобы в наименовании отражался смысл ее работы. Для задачи № 1, например, диалог в интерпретаторе Пролога может быть таким:

?- sorted([a,b,d,f]). yes ?- sorted([[a,f,b,d]). no ?-

Списки и строки

1.  Определить, является ли список упорядоченным по возрастанию.

Аргументы: исходный список.

?- pred([a,b,d,f]). yes ?- pred([[a,f,b,d]). no ?-

2.  Определить, имеет ли список четное число элементов, не прибегая к подсчету длины списка.

Аргументы: исходный список.

?- pred([a,b,d,f]). yes ?- pred([[a,b,d]). no ?-

3.  Перевести число из десятичной системы счисления в двоичную.

Аргументы: число в десятичной с.с.; число в двоичной с.с. (список).

?- pred(26,X). X = [1,1,0,1,0] yes ?-

4.  Найти в неупорядоченном списке вещественных чисел ближайших соседей – два числа, расстояние между которыми на вещественной оси является минимальным среди всех возможных пар.

Аргументы: исходный список; ближайшие соседи (список из двух чисел).

?- pred([0.1,0.04,8.6,7.56,8.11],X). X = [8.6,8.11] yes ?-

5.  Перевести число из двоичной системы счисления в десятичную.

Аргументы: число в двоичной с.с. (список); число в десятичной с.с.

?- pred([1,1,0,1,0],X). X = 26 yes ?-

6.  Перевести число из десятичной системы счисления в римскую.

Аргументы: число в десятичной с.с.; число в римской с.с. (список).

?- pred(24,X). X = [x,x,i,v] yes ?-

7.  Перевести число из римской системы счисления в десятичную.

Аргументы: число в римской с.с. (список); число в десятичной с.с.

?- pred([x,x,i,v],X). X = 24 yes ?-

8.  Перевести число из двоичной системы счисления в шестнадцатеричную.

Аргументы: число в двоичной с.с. (список); число в шестнадцатеричной с.с. (список).

?- pred([1,1,0,1,0],X). X = [1,a] yes ?-

9.  Перевести число из шестнадцатеричной системы счисления в двоичную.

Аргументы: число в шестнадцатеричной с.с. (список); число в двоичной с.с. (список).

?- pred([1,a],X). X = [1,1,0,1,0] yes ?-

10.  Определить, является ли первый список подмножеством второго. Списки не имеют дубликатов.

Аргументы: первый список; второй список.

?- pred([a,b,c],[s,a,e,c,d,b]). yes ?-

11.  Удалить из списка элементы с четными номерами.

Аргументы: исходный список; результирующий список.

?- pred([a,b,c,d,e],X). X = [a,c,e] yes ?-

12.  Удалить из списка те элементы, которые не имеют дубликатов.

Аргументы: исходный список; результирующий список.

?- pred([a,e,c,d,e],X). X = [e,e] yes ?-

13.  Дан числовой список – [A,B,C,D,E,…]. Посчитать результат по формуле R=A+B−C+D−E+… .

Похожие материалы

Информация о работе