Скачиваний:
12
Добавлен:
01.05.2014
Размер:
94.72 Кб
Скачать

Министерство образования Российской Федерации

Нижегородский государственный технический

университет

Кафедра “Компьютерные технологии в проектировании и производстве ”

Системы искусственного интеллекта и принятия решений

Методические указания к лабораторным работам

Часть 3

Нижний Новгород

2000

Составитель: М.Б.Волков

УДК 681

Ситемы искусственного интеллекта и принятия решений: Методические указания к лабораторным работам/НГТУ, кафедра КТПП; Сост. М.Б.Волков. Н.Новгород, 2000.  14 с.

Даны рекомендации к выполнению лабораторных работ по дисциплине ”Системы искусственного интеллекта и принятия решений” для студентов специальностей 071900  “Информационные системы”.

Науч. редактор С. Л.Моругин

Подп. 28.01.00 Формат 210148. Печ. л. 0,4

Нижегородский государственный технический университет

Кафедра “Компьютерные технологии в проектировании и

производстве “.

Адрес предприятия: 603600, Н. Новгород, ул. Минина 24.

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

1. Цель работы

Ознакомиться с понятиями списки. Получить навыки программирования списков на языке Visual Prolog.

2. Краткие сведения из теории

Список - это структура данных, которая либо пуста, либо состоит из двух частей: головы и хвоста. Хвост, в свою очередь, сам является списком.

Список рассматривается в Прологе как специальный частный случай двоичного дерева. Для повышения наглядности программ в Прологе предусматриваются специальные средства для списковой нотации, позволяющие представлять списки в виде:

[Элемент1,Элемент2,..]

или

[Голова|Хвост]

или

[Элемент1,Элемент2,…|Остальные]

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

список = "[" [ выражения [ "|" хвост ] ] "]"

хвост = переменная | вызов_функции

Значением пустого списка [] является специальная константа.

Над списками производят операции:

  • проверка принадлежности к списку,

  • конкатенация,

  • добавление элемента,

  • удаление элемента,

  • удаление подсписка.

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

Новые операторы определяются с помощью директивы ор, в которой указываются:

  • имя оператора,

  • тип оператора,

  • его приоритет.

Как правило, с оператором не связывается никакой операции; оператор - это просто синтаксическое удобство, обеспечивающее альтернативный способ записи термов.

3. Задания к работе и порядок ее выполнения

Создать (если отсутствует) свою директорию - C/student/группа/фамилия.

Запуск Visual Prolog 5.0 производится из главного меню

Пуск - Программы –Visual Prolog Personal Edicion – Vip 32.

    1. Используя отношение конкатенация, напишите цель, соответствующую вычеркиванию трех последних элементов списка L. Результат - новый список L1.

Указание: L - конкатенация L1 и трехэлементного списка.

    1. Напишите последовательность целей для порождения списка L2, получающегося из списка L вычеркиванием его трех первых и трех последних элементов. Определите отношение

последний( Элемент, Список)

так, чтобы Элемент являлся последним элементом списка Список. Напишите два варианта определения:

  • с использованием отношения конк,

  • без использования этого отношения.

    1. Определите два предиката

четнаядлина( Список) и нечетнаядлина( Список)

таким образом, чтобы они были истинными, если их аргументом является список четной или нечетной длины соответственно. Например, список [а, b, с, d] имеет четную длину, a [a, b, c] - нечетную.

3.5. Определите отношение

обращение( Список, ОбращенныйСписок),

которое обращает списки. Например,

обращение( [a,b,c,d],[d,c,b,a] ).

3.6. Определите предикат палиндром( Список).

Список называется палиндромом, если он читаемся одинаково, как слева направо, так и справа налево. Например, [м, а, д, а, м].

3.7. Определите отношение

сдвиг( Список1, Список2)

таким образом, чтобы Список2 представлял собой Список1, «циклически сдвинутый» влево на один символ. Например,

GOAL

сдвиг([1,2,3,4,5],L1),

сдвиг1(LI,L2)

дает

L1=[2,3,4,5,1]

L2=[3,4,5,1,2]

3.8. Определите отношение

перевод( Список1, Список2)

для перевода списка чисел от 0 до 9 в список соответствующих слов. Например,

перевод( [3,5,1,3], [три, пять, один, три] )

Замечание: Используйте в качестве вспомогательных следующие отношения:

означает(0,нуль).

означает(1,один).

означаете(2,два).

3.9. Определите отношение

подмножество( Множество, Подмножество)

где Множество и Подмножество - два списка представляющие два множества. Желательно иметь возможность использовать это отношение не только для проверки включения одного множества в другое, но и для порождения всех возможных подмножеств заданного множества. Например:

GOAL

подмножество([а,b,с],S ).

S=[a,b,c];

S=[b,c];

S=[c];

S=[];

S=[a,c];

S=[a];

3.10. Определите отношение

разбиениесписка( Список, Список1, Список2)

так, чтобы оно распределяло элементы списка между двумя списками Список1 и Список2 и чтобы эти списки были примерно одинаковой длины. Например:

разбиениесписка( [а, b, с, d, e],[a, с, е],[b, d]).

3.11. Перепишите программу об обезьяне и бананах из лекции таким образом, чтобы отношение

можетзавладеть( Состояние, Действия)

давало не только положительный или отрицательный ответ, но и порождало последовательность действий обезьяны, приводящую ее к успеху. Пусть Действия будет такой последовательностью, представленной в виде списка ходов:

Действия = [ перейти(дверь, окно),

передвинуть(окно, середина),

залезть, схватить ]

    1. Определите отношение

линеаризация( Список, ЛинейныйСписок)

где Список может быть списком списков, а ЛинейныйСписок - это тот же список, но «выровненный» таким образом, что элементы его подсписков составляют один линейный список. Например:

GOAL

линеаризацня([а,d,[с,d],[],[[[е]]],f, L).

L = [a,b,c,d,e,f]

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

Варианты заданий

1. Определить (и напечатать) координаты концов интервала на оси Х, покрываемого максимальным количеством отрезков из списка o1(X1_1,Х2_1), o2(X1_2,Х2_2), ... ,oN(X1_N,Х2_N).

2. Даны два списка целых чисел A1, ..., AN и B1, ..., BN. Cлить эти списки в один, исключить все повторения чисел и упорядочить их по возрастанию.

3. Для множества точек плоскости p1(X1,Y1), p2(X2,Y2), ..., pN(Xn,Yn) найти диаметр и центр минимальной описанной окружности.

4. В списке символов S1, S2, ..., SN найти первое и последнее вхождения указанного символа и исключить все символы между ними.

5. В списке символов S1, S2, ..., SN исключить все последовательности указанного вида, например [a,b,c,d].

6. В списке символов S1, S2, ..., SN найти длину наибольшей последовательности, построенной повторением одного и того же символа. Вывести эту последовательность.

7. В списке символов S1, S2, ..., SN каждую указанную последовательность символов заменить на другую указанную последовательность.

8. Из списка символов S1, S2, ..., SN исключить все символы между круглыми скобками. Сами скобки тоже должны быть отброшены. Однако, если внутри круглых скобок есть другая пара круглых скобок, то она и содержащиеся в ней символы должны быть сохранены. И так далее рекурсивно. Например, последовательность "ab(c(d(ef(gh)z)fg)r)dd(ik(l))" преобразуется в "ab(d(gh)fg)dd(l)".

9. В списке символов S1, S2, ..., SN подсчитать количество букв в последнем слове, если разделителем между словами является один или несколько пробелов.

10. В списке символов S1, S2, ..., SN подсчитать количество слов, если разделителем между словами является один или несколько пробелов.

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

12. В списке символов S1, S2, ..., SN найти число слов, начинающихся с заданной буквы, если разделителем между словами является один или несколько пробелов.

13. В списке символов S1, S2, ..., SN найти длину самого короткого слова, если разделителем между словами является один или несколько пробелов. Вывести это слово.

14. В списке символов S1, S2, ..., SN найти все вхождения указанного слова, если разделителем между словами является один или несколько пробелов.

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

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

17. В списке символов S1, S2, ..., SN найти среднюю длину слов, если разделителем между словами является один или несколько пробелов. Вывести все слова, имеющие эту длину.

18. В списке символов S1, S2, ..., SТ найти длину самого длинного слова, если разделителем между словами является один или несколько пробелов. Вывести это слово.

19. Преобразовать список целых чисел A1, А2, ..., AN следующим образом:

  • исключить нули,

  • слева записать все положительные числа,

  • справа - все отрицательные.

20. Каждый элемент списка целых чисел A1, A2, ..., AN помножить на квадрат наименьшего элемента и представить этот список в упорядоченном виде.

21. Из списка целых чисел A1, А2, ..., AN исключить все элементы, совпадающие со значением [(A_max + A_min + A_ср) / 3].

22. Из списка целых чисел исключить все члены, равные целой части от среднего арифметического. Результирующий список представить в упорядоченном виде.

23. Список целых чисел A1, A2, ..., AN оставить без изменений, если он упорядочен по возрастанию или убыванию. В противном случае:

  • каждый четный элемент списка утроить,

  • каждый элемент, стоящий на нечетном месте и кратный четырем, удалить.

24. Список отрезков o1(X1_1,X2_1), o2(X1_2,X2_2), ..., oN(X1_N,X2_N) упорядочить и найти отрезки с минимальной и максимальной длиной.

25. Даны два списка целых чисел A1, ..., AN и B1,...,BN найти

  • max(A1*BN, A2*BN-1, ..., AN*B1) и

  • min(max(A1,...,AN), min(B1,...,BN)).

26. В каждой из девяти клеток квадрата 3х3 разместить одно из чисел 1, 2 или 3 так, чтобы сумма чисел, стоящих в каждом вертикальном ряду, в каждом горизонтальном ряду и на каждой главной диагонали равнялась 6.

27. В квадрате размером 3х3 расставить числа 1, 2, 3, 4, 5, 6, 7, 8 и 9 так, чтобы суммы чисел, стоящих в каждом вертикальном ряду, в каждом горизонтальном ряду и на каждой главной диагонали были равны.

28. Площадь комнаты разделена на шесть прямоугольников, пять из них заняты мебелью, шестой - свободен. Переставить мебель так, чтобы шкаф и кресло поменялись местами, при этом никакие два предмета не могут размещаться одновременно на одном прямоугольнике. Пример начальной расстановки:

Стол

Стул

Шкаф

Стул

Кресло

29. Решить упрощенный вариант головоломки "пятнашки" (поле размером 3х3, номер старшей фишки - 8) для указываемой начальной позиции. ( Лит-ра: Н.Нильсон. Принципы ИИ... )

30. Для N произвольно заданных костяшек домино необходимо найти все возможные цепочки из этих костяшек длиной N. Если таких цепочек нет, то выдать максимально длинную возможную цепочку.

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

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

33. Для произвольно введеной последовательности целых чисел определить (и напечатать) максимально длинную подпоследовательность чисел, расположенных в возрастающем порядке.

34. Для произвольно введеной последовательности символов определить содержатся ли в ней все символы указанного слова в той же последовательности, что и в самом слове. Например: после-довательность "development" содержит в себе символы слова "dont".

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

36. Написать программу, реализующую беспроигрышную стратегию игры "в крестики-нолики" на поле 3х3. Организовать вывод текущей позиции после каждого хода программы и человека.

37. Для списка пар целых чисел р1(Х1,Y1), p2(X2,Y2), ..., pN(XN,YN), рассматриваемых как координаты точек на плоскости, найти и вывести все прямоугольники и квадраты, все четыре вершины которых располагаются в этих точках. Определить фигуру наибольшей площади.

38. Написать программу шифрации последовательности А нулей и единиц в последовательность В также нулей и единиц, реализующую следующий алгоритм шифрации:

  • b(1) = a(1);

  • b(j) = 1, если a(j) = a(j-1) и b(j) = 0 в противном случае.

Написать также программу дешифрации В в А.

Соседние файлы в папке Представление данных в информационных системах