Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

IIS / Печень О.А / Тема 2 / ИДЗ для Пролог - выдача

.doc
Скачиваний:
26
Добавлен:
31.03.2015
Размер:
73.73 Кб
Скачать

Индивидуальные задания по теме язык программирования Пролог

В каждом индивидуальном задании необходимо:

Разработать программу по теме задания.

Если необходимо по смыслу задания и/или указано в тексте задания, необходимо создать набор тестовых утверждения от 20 до 50, для проверки и демонстрации работоспособности программы.

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

Список задач

  1. Создать программу, которая определяет степень родства, исходя из родственных связей. Программа должна отвечать на вопросы по родственным отношения: Брат, Сестра, Дед, Прадед, Бабушка, Прабабушка, Внук, Правнук, Внучка, Правнучка, Дядя, Тетя, Свекровь, Тест.

Необходимо подготовить тестовую базу для демонстрации работы программы. В тестовых утверждениях определяются базовые родственные отношения: Мать, Отец, Муж, Жена, Сын, Дочь.

  1. Написать программу-калькулятор символьных вычислений. На вход программы поступают строки вида «2+5=», «2-6*5=». Программа должна разобрать строку и вывести результат вычислений. Ограничения – программа обрабатывает только целые числа, поддерживаемые операции – плюс, минус, умножение, деление, может быть несколько операций в строке, максимальное число 32565.

  2. Написать программу, позволяющую играть в игру «Угадай животное». Правила игры следующие: программа задает вопросы, позволяющие идентифицировать животное, например «У животного 4 ноги?», «Есть ли хвост?»; человек отвечает «да» или «нет». Как только программа определяет животное, она выводит его название – например «Это единорог» и задает вопрос «Правильно?». Если человек отвечает «да», игра начинается заново, если «нет», программа спрашивает, чем отличается животное, запоминает текст вопроса и ответ, далее игра начинается заново.

  3. Создать программу позволяющую исследовать лабиринт и находить выход из лабиринта. Комнаты входа в лабиринт описываются одноместным предикатом «enter». Комнаты выхода из лабиринта описываются одноместным предикатом «out». В комнатах могут быть опасные вещи, описываются двухместным предикатом «danger». Могут быть сокровища, описываемые предикатом «treathure». Переходы лабиринта из комнаты в комнату описываются с помощью двухместного предиката «route». Программа должна выбирать самый краткий путь по числу переходов, сообщать и найденных сокровищах и встреченных опасностях.

  4. Создать программу позволяющую исследовать лабиринт и находить выход из лабиринта. Комнаты входа в лабиринт описываются одноместным предикатом «enter». Комнаты выхода из лабиринта описываются одноместным предикатом «out». В комнатах могут быть опасные вещи, описываются двухместным предикатом «danger». Могут быть сокровища, описываемые предикатом «treathure». Переходы лабиринта из комнаты в комнату описываются с помощью двухместного предиката «route». Программа должна выбирать безопасный путь и сообщать его, либо сообщать о его отсутствии.

  5. Написать программу для игры в «Крестики-нолики». Поле для игры 9 на 9 клеток, игра начинается с центральной ячейки, программа ходит первой.

  6. Есть клетка. В клетке подвешен банан, на полу лежат ящики и разбросаны палки. В клетку запускают обезьяну и она должна достать банан. Надо смоделировать поведение обезьяны.

Чтобы достать банан надо использовать два предмета (поставить либо два ящика друг на друга, либо ящик и палку, либо соединить две палки).

Доступные действия (предложения):

  • искать предметы на полу, возвращает тип найденного предмета (может сообщить, что предмета на полу нет);

  • поставить предметы друг на друга (дает истину только для ящиков);

  • встать на предмет (дает истину только для ящиков);

  • соединить предметы (дает истину только для двух палок);

  • достать банан (с вероятностью 50% может сообщить, что не получилось).

Написать программу, которая по вводимым произвольным данным о предметах в комнате смоделирует поведение обезьяны, достающей банан.

  1. Распознавание индикатора.

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

  1. Задача раскраски карты. Вам задана карта, для которой сообщается, какие из стран на ней имеют общие границы. Вам необходимо написать программу, определяющую минимальное количество цветов для раскраски карты.

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

  3. Задача про волка, козу и капусту (перевезти через реку). К реке подходят волки, козы, подвозят капусту – надо минимизировать потери среди пассажиров. Не вошедшие в лодку пассажиры могут взаимодействовать (не более трех пассажиров в очереди). На второй стороне реки всегда остается последний пассажир (следующий перевезенный вами догонит его и встретится). Пассажиров можно возить как в прямом, так и в обратном направлении для их спасения. Программе на вход задаются подходящие пассажиры нажатием одной из трех кнопок (на первом шаге нажимаются три кнопки), программа выдает, кого она перевозит и кто остается на берегу после перевозки. Если на берегу остается только один пассажир, программа ожидает появления трех пассажиров (как на первом шаге).

  4. Римские цифры 1.

Напишите программу, переводящую запись натурального числа до 3000 из арабской системы в римскую.

Цифры римской системы:

1 - I 5 - V

10 - X 50 - L

100 - C 500 - D

1000 - M

Число определяется из записи как сумма значений цифр, взятых со знаком "+" или "-" по такому правилу: значение цифры имеет знак "-" тогда и только тогда, когда рядом с ней справа есть цифра с большим значением. Слева от большей цифры может стоять не более одной меньшей. Справа от большей цифры может стоять не более 3 одинаковых меньших цифр. Цифры V, L, D не могут стоять слева от больших цифр. Цифры I, X, C могут стоять слева от цифр со значением, превосходящим их значение не более, чем в десять раз.

Примеры:

1987 = МCMLXXXII 999 = CMXCIX

28 = XXVIII 49 = XLIX

  1. Римские цифры 2.

Переводчик, работающий с древней рукописью, в которой встречается много натуральных чисел в римской записи, хочет для перевода их в арабскую систему счисления пользоваться ЭВМ. Опишите алгоритм, который по записи числа, меньшего 3000, в римской системе счисления строит его запись в арабской системе.

  1. Багдадский вор.

В высотном здании (150 этажей) багдадского банка возник пожар. Огонь распространяется со скоростью 1 этаж в минуту. В здании имеется лифт, который движется со скоростью 10 этажей в минуту и застревает, если проходит через этаж, захваченный огнем. В момент начала пожара лифт стоит на первом этаже и там же находится знаменитый багдадский вор, желающий вынести из банка как можно больше золотых монет. Он знает номера этажей, на которых хранятся монеты, и точные их количества на каждом таком этаже. Для поиска монет на этаже и переноса

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

  1. Домино.

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

  1. Лифт в жилом здании.

Лифт в жилом в 9-этажном здании. Вместимость - 4 человека независимо от веса. Пассажиры появляются случайным образом, чтобы подняться с 1-го этажа или опуститься на 1-й. На каждом этаже - одна кнопка вызова и каждый пассажир, подходя нажимает ее. Лифт запоминает вызовы по времени. Лифт должен забирать пассажиров, чтобы минимизировать их время ожидания, подбирая попутных пассажиров, если это возможно. Программа получает список нажатий и затем выдает оптимальный набор движений лифта.

  1. Лифт в учреждении.

Грузоподъемность - 500 кг, пассажиры массой от 50 до 100 кг появляются случайным образом, чтобы переместиться с любого этажа на любой. На 1-м и 9-м этажах - одна кнопка вызова, на других - по две - "вверх" и "вниз", и лифт останавливается, чтобы взять попутных пассажиров. Надо минимизировать перемещения лифта. Программа получает список нажатий и затем выдает оптимальный набор движений лифта.

  1. Модель жизни по Конвею.

В некоторых клетках двумерного поля размером М x N живут организмы, их жизнь подчиняется очень простому набору правил :

  • если в текущий момент времени по соседству с организмом (по горизонтали, вертикали и диагонали) есть два или три организма, он будет жить и в следующий момент времени;

  • если по соседству с организмом меньше двух организмов в следующий момент времени он умрет от одиночества;

  • если по соседству с организмом больше трех организмов, в следующий момент времени он умрет от перенаселения;

  • если рядом с пустой клеткой находится ровно три организма, в следующий момент времени в ней появится новый организм.

Написать программу моделирующую жизнь по данному алгоритму:

  • задается расположение организмов в начальный момент времени;

  • по шагам (исполнение шага происходит по нажатию определенной клавиши с клавиатуры) вычисляется состояние колонии организмов и выводится на экран;

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

  1. Поимка комара.

Квадратное болото разделено на одинаковые клетки, образующие 8 строк и 8 столбцов. Положение каждой клетки определяется номерами строки и столбца, в которых она находится. Нумерация начинается с левого верхнего угла. На одной из клеток сидит лягушка, а на какой-то другой - комар. Пример приведен на рисунке.

(1,1)

К

Л

Правила поведения лягушки и комара:

    • Лягушка хочет съесть комара, а комар старается этого избежать.

    • В любой момент лягушка и комар знают текущее положение друг друга.

    • Перемещаются лягушка и комар по очереди.

    • Первый ход за лягушкой.

    • За один ход лягушка может прыгнуть на любую клетку болота, находящуюся в той же строке или в том же столбце. Кроме того, лягушка может прыгнуть и на соседнюю по диагонали клетку, если в этой клетке сидит комар.

    • Комар за один ход может перелететь на одну из (максимум 8-ми) соседних клеток болота.

    • Если лягушка прыгает на клетку, на которой находится комар, или пролетает над ней в прыжке, то она съедает комара.

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

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

  • запрашивает начальные положения лягушки и комара;

  • запрашивает у пользователя, чьими ходами (лягушки или комара) он будет распоряжаться;

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