ТОП 10:

Получение элемента списка по его номеру



Предикат имеет арность три: первый аргумент — исходный список, второй аргумент — номер элемента и третий — элемент списка, имеющий заданный номер.

Правила для этой процедуры: отбрасываем по одному элементу с начала списка и отнимаем от N по 1 до тех пор, пока не дойдем до 1, значит этот элемент (голова списка) – искомый.

Рис. 4.11.Программа получения элемента по его порядковому номеру

Практикум 4-9

: Создайте предикат, возвращающий по списку и двум числам N и M подсписок исходного списка длиной M, состоящий из элементов с номерами от N до N+M.

 

Запись элементов списка в обратном порядке

Разработаем предикат, позволяющий "обратить" список (записать его элементы в обратном порядке). Предикат будет иметь два аргумента: первый — исходный список, второй — результат.

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

Рис. 4.12.Программа записи элементов списка в обратном порядке

Можно написать данный предикат без использования предиката conc. В этом случае нужно добавить дополнительный аргумент, в котором будет "накапливаться" результат. От исходного списка берется по элементу (голова) и дописывается к вспомогательному списку. Когда исходный список будет исчерпан, "накопленный" список передается в третий аргумент в качестве ответа. До этого момента третий аргумент остается от шага к шагу неконкретизированным. Реализация этой процедуры будет выглядеть следующим образом:

Рис. 4.13.Хвостовая рекурсия для записи элементов списка в обратном порядке

Поиск максимального (минимального) элемента в списке

Для пустого списка понятие максимального элемента не имеет смысла. В списке, состоящем из одного элемента, этот элемент и будет максимальным.

Рекурсивное правило для поиска максимального элемента можно записать так:

max_элемент=max(голова, max_элемент(хвост))

В правиле используется предикат max, который находит максимум из двух чисел (см. рис.2.1).

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

 

Практикум 4-10

: Создайте предикат, для нахождения максимального значения в списке чисел

 


 

Самостоятельные задания

1.Ниже представлен пример Пролог – программы:

DOMAINS

dog_list=symbol*

PREDICATES

dogs(dog_list).

find_it(symbol,dog_list).

CLAUSES

find_it(X,[X,_]).

find_it(X,[_,Y]):-find_it(X,[Y]).

GOAL

find_it(«болонка»,[«лайка», «дог» ]),write(“да”).

 

Что напечатает эта программа?

2. Напишите программу для определения максимального элемента в списке

3. Создайте предикат, находящий предпоследний элемент списка. Создайте предикат, удаляющий предпоследний элемент списка.

 

Контрольное задание 2

Исходные данные

Вариант
Задачи

Задачи

1. Создайте предикат, порождающий список, состоящий из случайного количества (но не более 10) случайных чисел от 0 до 100.

2. Напишите программу для отношения ДВОЙНОЙ_СПИСОК (Список1, Список2), в котором каждый элемент Списка1 удваивается и записывается в Список2, например, ДВОЙНОЙ_СПИСОК ( [1,2,3],[1,1,2,2,3,3] ).

3. Определить отношение РАЗНОСТЬ(Список1, Список2, Список3), где элементы списка Список3 принадлежат Списку1, но не принадлежат Списку2.

4. Определить отношение СДВИГ(Список1, Список2) таким образом, чтобы список Список2 представлял собой список Список1, "циклически сдвинутый" влево на один символ, например, СДВИГ([a,b,c,d], [d,a,b,c]).

5. Треугольное число с индексом N - это сумма всех натуральных чисел до N включительно. Напишите программу, задающую отношение triangle(N,T), истинное, если T - треугольное число с индексом N.

6. По кругу расположено N человек. Начиная с некоторой позиции, мы считаем по кругу и каждый второй человек выбывает из круга, при этом круг смыкается. Напишите программу, которая определяет порядок, в котором люди выбывают из круга, например, ВЫБ(2, [a,b,c,d,e,f,g], [b,d,f,a,e,c,g])

7. По кругу расположено N человек. Начиная с некоторой позиции, мы считаем по кругу и каждый третий человек выбывает из круга, при этом круг смыкается. Напишите программу, которая определяет порядок, в котором люди выбывают из круга, например, ВЫБ(3, [a,b,c,d,e,f,g], [c,f,b,g,e,a,d])

8. Напишите программу, которая подсчитывает число вхождений каждого элемента списка L и формирует новый список L1, в котором каждый элемент - это список, состоящий из элемента и числа его вхождений в список L. Например, если L=[f, d, f, g, a, f, d ], то L1=[[f, 3], [d, 2], [g, 1], [a, 1] ].

9. Определите два предиката ЧЕТНАЯ_ДЛИНА (Список) и НЕЧЕТНАЯ_ДЛИНА (Список) таким образом, чтобы они были истинными, если их аргументом является список четной или нечетной длины соответственно.

10. Напишите программу для предиката ПОДСТАНОВКА (X,Y, Список1, Список2), где Список2 - результат подстановки Y вместо всех вхождений X в Список1. Например, отношение ПОДСТАНОВКА (а , х , [а, b, а, с], [х, b, х, с]) - истинно, а отношение ПОДСТАНОВКА (а, х, [а, в, а, с], [ а, в, х, с]) - ложно.

11. Определите отношение ПЕРЕВОД (Список1, Список2) для перевода списка чисел от 0 до 9 и список соответствующих им названий (строк). Например, ПЕРЕВОД ([3, 5, 2, 3], [три, пять, два, три] ). Используйте следующее отношения:

ОЗНАЧАЕТ (0, ноль).

ОЗНАЧАЕТ (1, один).

ОЗНАЧАЕТ (2, два).

12. Определить отношение ПЕРЕСЕЧЕНИЕ(Список1, Список2, Список3), где элементы списка Список3 являются общими для списков Список1 и Список2.

13. Определить отношение ПРОИЗВЕДЕНИЕ(Список1,Список2,Список3), в котором элементы списка Список3 равны произведениям соответствующих элементов списков Список1 и Список2Создайте предикат, переводящий список цифр от 0 до 9 в список соответствующих им римских чисел.

14. Создайте предикат, переводящий список арабских чисел в список соответствующих им римских чисел.

15. Создайте предикат, переводящий список римских чисел в список соответствующих им арабских чисел.

16. Создайте предикат, удваивающий значения элементов списка.

17. Создайте предикат, порождающий по заданным числам M, K список, состоящий из К-М случайных чисел из промежутка от M до K.

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

19. Создайте предикат, преобразующий исходный список чисел в список позиций отрицательных элементов.

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

21. Создайте предикат, который разделит исходный список из целых чисел на два списка: список положительных чисел и список отрицательных чисел.

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

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

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

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

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

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

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

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

30. Создайте предикат, генерирующий все перестановки элементов списка, указанного в качестве первого аргумента предиката.

31. Создайте предикат, осуществляющий замену всех отрицательных чисел нулями.

32. Создайте предикат, вычисляющий скалярное произведение векторов, заданных списками целых чисел.

33. Создайте предикат, определяющий первую позицию подсписка в списке.

34. Создайте предикат, добавляющий элементы одного списка во второй список, начиная с заданной позиции.

35. Создайте предикат, заменяющий в исходном списке первое вхождение заданного значения другим.

36. Создайте предикат, порождающий по заданному натуральному числу N список, состоящий из N случайных натуральных чисел из промежутка от 1 до 100.

37. Создайте предикат, который увеличивает элементы исходного списка на единицу.

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

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

40. Даны два списка, имеющие ненулевое пересечение. Построить список, включающий все элементы указанных двух списков без повторений.

41. Создайте предикат, преобразующую исходную строку в список символов, например, ПРЕОБ( “кошка”, [“к”,”о”,”ш”,”к”,”а”]). Используйте стандартный предикат frontchar

42. Создайте предикат, вычисляющий позицию минимального элемента в списке

43. Создайте предикат, вычисляющий позицию максимального элемента в списке

44. Создайте предикат, преобразующую исходный список в строку символов, например, ПРЕОБ( [“к”,”о”,”ш”,”к”,”а”],“кошка”). Используйте стандартный предикат frontchar

45. Создайте предикат, преобразующую исходный список в строку символов, например, ПРЕОБ( [“к”,”о”,”ш”,”к”,”а”],“кошка”). Используйте стандартный предикат frontchar


ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 5.

Решение логических задач

 

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

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

Пример простой логической задачи (два измерения)

Условия задачи: В автомобильных гонках три первых места заняли Алеша, Петя и Коля. Какое место занял каждый из них, если Петя занял не первое и не третье место, а Коля - не третье?

 

Традиционным способом задача решается заполнением таблицы. По условию задачи Петя занял не первое и не третье место, а Коля - не третье. Это позволяет поставить символ '-' в соответствующих клетках. Между множеством имен участников гонки и множеством мест должно быть установлено взаимно-однозначное соответствие. Поэтому определяем занятое место сначала у Пети, затем у Коли и, наконец, у Алеши. В соответствующих клетках проставляем знак '+'. В каждой строке и каждом столбце должен быть только один такой знак.

Имя I место II место III место
Петя - + -
Коля + - -
Алеша - - +

 

Из таблицы следует, что Алеша занял третье место, Петя – второе, Коля – первое.

На языке Пролог структура программы представлена на рис. 5.1. В ответ Пролог выдаст имена ребят и занятые ими места.

 

Рис. 5.1.Программа решения простой логической задачи

Практикум 5-1

:   Витя, Юра и Миша сидели на скамейке. В каком порядке они сидели, если известно, что Миша сидел слева от Юры, а Витя слева от Миши.  

 

Практикум 5-2

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

Пример задачи (три измерения)

 

Условия задачи: Четверо ребят: Лева, Коля, Миша и Петя решили позавтракать в разных местах: один – в кафе, другой - в столовой, третий – в закусочной, а четвертый – в буфете.

После завтрака все собрались вместе. Разговор зашел о том, кто как позавтракал.

Выяснилось, что все они пили разные напитки, так как в каждом из тех мест, где они завтракали, оказалось в наличие только по одному напитку: в одном месте – только кофе, в другом – только молоко, в третьем – только кефир, а в четвертом только чай.

В буфете, например, было только молоко, а в столовой не было кефира.

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

Лева рассказал, что он пил кефир.

А Миша сказал, что он не был ни в закусочной, ни в буфете.

Кто где завтракал и что при этом пил?

 

При решении этой задачи удобно использовать списки и предикаты работы со списками (рис.5.2).

Рис. 5.2.Программа решения логической задачи 2

 

Результат выполнения программы представлен на рис. 5.3

Рис. 5.3.Результат решения логической задачи 2

Практикум 5-3

:   В пансионате отдыхали Арбатов, Быков, Власов, Гордеев, Дмитриев, Елисеев. Все эти люди приехали из разных городов: Москвы, Санкт-Петербурга, Киева, Одессы, Риги и Таллина. Кроме того, известно, что: - Арбатов и москвич - врачи; -Дмитриев и петербуржец - учителя; -Власов и киевлянин - инженеры; -Быков и Елисеев никогда не были в Киеве; -Рижанин старше Арбатова, а житель Таллина старше Власова; - Быков и москвич никогда не были в Одессе, а Власов и рижанин – в Таллине. Выяснить, кто в каком городе живет и у кого какая профессия. Ответ для проверки представлен на рис. 5.4  

 

Рис. 5.4.Ответ к задаче из Практикума 5-2

 

Пример задачи (альтернативные высказывания)

В спортивных соревнованиях принимали участие пять команд: "Вымпел", "Метеор", "Нептун", "Старт" и "Чайка". Об их итогах соревнования имеется пять высказываний:

1). Второе место занял "Вымпел", a "Cтарт" оказался на третьем.

2). Хорошо выступала команда "Нептун", она стала победителем, а "Чайка" вышла на второе место.

3). Да нет же, "Чайка" заняла только третье место, а "Нептун"- был последним.

4). Первое место по праву завоевал "Cтарт", а "Метеор" был четвертым.

5). Да, "Метеор", действительно, был четвертым, а "Вымпел" был третьим.

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

Как распределились места между командами?

Секция clauses Пролог-программы для решения этой задачи представлена на рис. 5.5.

Рис. 5.5.Секция clauses для задачи «Спортивные соревнования»

Практикум 5-4

:   Найдите решение для примера рис. 5.5  

Практикум 5-5

: Для четырех дежурных (Антипов, Климов, Марков и Лебедев) нужно составить график дежурств по одному с понедельника до четверга с соблюдением следующих условий: 1) Если Лебедев не будет дежурить в понедельник, то в понедельник согласен дежурить Климов. 2) Ecли Климов не сможет дежурить ни в понедельник, ни в четверг, то Антипов будет дежурить в понедельник. 3) Если Марков не сможет дежурить в четверг, то Климов будет дежурить в среду. 4) Если Лебедев придет дежурить во вторник, то Климов не будет дежурить в понедельник. 5) Если Антипов не сможет дежурить в понедельник, то Марков не сможет дежурить во вторник. Каким должен быть график дежурств ?  

 

 

Самостоятельные задания

 

1. На школьном вечере танцевали три пары. Юноши, как и девушки, были одеты в костюмы разных цветов: красный, зеленый и синий. Оказавшись в один из моментов рядом с девушкой в зеленом, юноша в красном обратился к ней: "Неправда ли, забавно получается: ни у кого из нас цвет костюма не совпадает с цветом костюма партнера". В костюме какого цвета был юноша, танцевавший в паре с девушкой в красном?

Ответ

Юноша в красном танцует с девушкой в синем,

а девушка в зеленом - с юношей в синем.

девушка в красном танцует с юношей в зеленом

 

Контрольное задание 3

Исходные данные

Вариант
Задачи

Задача 1

Перед Вами пять коробочек: белая, черная, красная, синяя и зелёная. Также есть по два шарика для каждого из цветов. В каждой коробочке лежит по два шарика, причём цвета коробочки и шариков могут и не совпадать. Также известно, что:

1. Ни один шарик не лежит в коробочке того же цвета, что и он сам;

2. В красной коробочке нет синих шариков;

3. В коробочке нейтрального цвета (то есть белого или чёрного) лежит один красный и один зелёный шарик;

4. В чёрной коробочке лежат шарики холодных тонов (зелёный и синий цвета);

5. В одной из коробочек лежат один белый и один синий шарик;

6. В синей коробочке находится один чёрный шарик.

7. Какого цвета шарики лежат в каждой коробочке?

Ответ

Белая коpобочка: Кpасный и Зеленый

Чеpная коpобочка: Зеленый и Синий

Зеленая коpобочка: Белый и Синий

Синяя коpобочка: Чеpный и Кpасный

Кpасная коpобочка: Белый и Чеpный

Задача 2

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

1. Каждой из четырех девушек подарили один букет;

2. У всех девушек были разные цветы;

3. Юрий целый день не видел Катю и Марину;

4. Дима не смог купить букет роз;

5. Андрей не дарил цветов ни Оле, ни Марии;

6. Георгий сначала хотел подарить букет Лене или Кате, но потом передумал;

7. Ни Лена, ни Оля не встречались с Димой;

8. Катя так и не получила свои любимые мимозы;

9. Андрей не покупал цветов на букву "Г" ;

10. Ни Лене, ни Оле не дарили роз;

11. Юрий не успел купить гладиолусы;

12. Георгий помнил, что видел у своих друзей букеты гвоздик и мимоз;

13. В итоге у Марины не оказалось гвоздик и гладиолусов, которые она ожидала получить;

14. Лена хвасталась подруге, что ей "не подарили этих дешевых мимоз".

 

Ответ

Юpий - гвоздики - Лене

Андpей - pозы - Кате

Дима - мимозы - Маpине

Геоpгий - гладиолусы - Оле

 

Задача 3

Вчера вечером:

1) Андрей отправился на концерт;

2) Борис провёл всё время с Ольгой;

3) Сергей так и не увиделся с Ритой;

4) Полина побывала в кино;

5) Рита посмотрела спектакль в театре.

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

6) какая-то пара посетила художественную выставку.

Кто с кем был и где?

Ответ

Андрей - Света- концерт

Сергей - Полина - кино

Борис - Ольга - выставка

Дима - Рита - театр

 

Задача 4

Четыре брата собрались на дискотеку. Когда они выходили из дома каждый ошибся и случайно взял не свои шляпу и куртку, а двух своих братьев. Михаил взял куртку того, чью шляпу взял Филипп. В то время как куртку Филиппа взял тот, кто взял шляпу Михаила. Семён взял Шляпу Дмитрия.

Чьи куртки и шляпы взяли братья?

Ответ

Михаил взял куртку Семёна и шляпу Филиппа.

Филипп взял куртку Дмитрия и шляпу Семёна.

Дмитрий взял куртку Филиппа и шляпу Михаила.

Семён взял куртку Михаила и шляпу Дмитрия.

 

 

Задача 5

Однажды на отдыхе за круглым столом оказались пятеро ребят родом из Москвы, Санкт-Петербурга, Новгорода, Перми и Томска: Юра, Толя, Алеша, Коля и Витя. Москвич сидел между томичом и Витей, санкт-петербуржец - между Юрой и Толей, а напротив него сидели пермяк и Алеша. Коля никогда не был в Санкт-Петербурге, а Юра не бывал в Москве и Томске, а томич с Толей регулярно переписываются. Определите, в каком городе живет каждый из ребят.

Ответ

Толя живет в Москве,

Витя - в Санкт-Петербурге,

Юра - в Новгороде,

Коля - в Перми,

а Алеша - в Томске.

 

Задача 6

 

Кто любит Вову?

В классе есть пять первоклассников: Аня, Вова, Вика, Света и Сережа.

1. Тот, кто любит Вову - дружит со Светой.

2. Те, кого Вика считает своими врагами зовут Аня и Света. Зато Вика дружит с Вовой и Сережей.

3. Вова дружит с Викой, Аней и Сережей, но не дружит со Светой.

 

Как зовут девочку, которая любит Вову?

 

Ответ

: Аня

 

Задача 7

На деловой встрече были писатель, химик, биолог и врач. Их звали (по алфавиту): Анна, Дмитрий, Екатерина и Стас. Дмитрий сказал сидящему рядом биологу, что только что встретил Екатерину с пончиками. Анна сидела напротив врача и рядом с химиком. Врач про себя размышлял о том, что Стас - глупое имя. Назовите специальность каждого.

Ответ

биологом была Анна.

Врачом был Стас

Екатерина - писатель, а Дмитрий - химик

 

Задача 8

В поезде Москва - Петербург едут пассажиры Иванов, Петров, Сидоров. Такие же фамилии имеют машинист, электрик и кондуктор бригады поезда. Известно, что:

1) Пассажир Иванов живет в Москве.

2) Кондуктор живет на полпути от Москвы до Петербурга.

3) Пассажир, однофамилец кондуктора, живет в Петербурге.

4) Пассажир, живущий ближе к месту жительства кондуктора, чем другие пассажиры, точно втрое старше кондуктора.

5) Пассажиру Петрову в тот день исполнилось 20 лет.

6) Сидоров (из бригады) недавно выиграл у электрика партию в бильярд.

Какая фамилия у машиниста?

Ответ

: Сидоров.

 

Задача 9

Перед началом забегов зрители обсуждали скаковые возможности трех лучших лошадей с кличками "Абрек", "Ветер", "Стрелок".

- Победит или "Абрек", или "Стрелок", - сказал один болельщик.

- Если "Абрек" будет вторым, то победу принесет "Ветер", - сказал другой болельщик.

- Много вы понимаете в лошадях, - возмутился третий болельщик. Вторым придет или 'Ветер", или "Абрек".

- А я вам скажу, - вмешался четвертый болельщик, - что если "Абрек" придет третьим, то "Стрелок" не победит.

После забега выяснилось, что три лошади - "Абрек", "Ветер" и "Стрелок" - заняли три первых места, не деля между собой ни одного из мест, и что все четыре предсказания болельщиков были правильны. Как кончился забег?

 

Задача 10

В семье пять человек: муж, жена, их сын, сестра мужа и отец жены. Их профессии - инженер, юрист, слесарь, учитель и экономист. Известно, что юрист и учитель - не кровные родственники. Слесарь младше экономиста, и оба играют в футбол за сборную своего завода. Инженер моложе учителя, но старше жены своего брата. Назовите профессии каждого.

Ответ

сестра мужа - инженер

жена - юрист, а учитель - ее муж.

слесарь - это сын, а экономист - его дед

Задача 11

В кафе встретились три друга: скульптор Белов, скрипач Чернов и художник Рыжов. "Замечательно, что у одного и нас белые, у другого чёрные, а у третьего рыжие волосы, но ни у кого цвет волос не соответствует фамилии", - заметил черноволосый. "Ты прав", - сказал Белов. Какой цвет волос у художника?

 

Ответ

: У художника черный цвет волос

.

Задача 12

Жили четыре друга. Звали их Альберт, Карл, Дитрих и Фридрих. Фамилии друзей те же, что и имена, только так, что ни у кого из них имя и фамилия не были одинаковыми, кроме того, фамилия Дитриха не Альберт. Определите фамилию и имя каждого мальчика, если известно, что имя мальчика, у которого фамилия Фридрих, есть фамилия того мальчика, имя которого - фамилия Карла.

Ответ

Альберт Дитрих

Карл Альберт

Дитрих Фридрих

Фридрих Карл

 

Задача 13

На ледяном поле 5 хоккеистов: Ольховский, Малышев, Белов, Таманин, Лавров - штурмовали ворота. Раздался свисток судьи. "Удаляет двух", - подумали спортсмены. "Без Малышева или Ольховского я не останусь на поле", - сказал Таманин. "Я тоже, "- сказал Лавров. "Удаляют либо меня с Беловым, либо Таманина с Лавровым", - сказал Малышев. Когда судья объявил о своем решении, все оказались правы и, кроме того, Ольховский и Белов не остались вместе на поле. Кто остался на поле ?

Ответ

на поле остались

Ольховский, Таманин, Лавров.

Задача 14

На одном вечере среди гостей оказалось пять офицеров: пехотинец, артиллерист, лётчик, связист и сапер. Один из них был капитаном, трое - майорами и один - подполковник. Также известно, что:

1. У Яноша такое же звание, как и у сапера и ещё одного офицера, который служит в другом роде войск;

2. Офицер связист и Ференц - неразлучные друзья;

3. На днях офицер-лётчик вместе с Белой и Лайошем побывал у кого-то в гостях;

4. Недавно у артиллериста перестал работать радиоприёмник и он попросил Лайоша помочь связисту устранить неисправность;

5. Ференц чуть было не стал лётчиком, но потом по совету своего друга сапера избрал другой род войск;

6. Янош по званию старше Лайоша, а Бела - старше Ференца;

7. Пятый офицер, Андраш, накануне вечера был в гостях у Лайоша.

Определите имя каждого офицера, его звание и род войск, в котором он служит.

Ответ

Янош - майор - лётчик

Ференц - майор - артиллерист

Бела - подполковник - связист

Лайош - капитан - пехотинец

Андраш - майор - сапер

 

Задача 15

Семеро друзей - Антонов, Борисов, Васильев, Глебов, Дмитриев, Егоров

и Иванов - по странному стечению обстоятельств имеют "совпадающие"

имена, причем ни один из них не является "тезкой" своей фамилии.

Кроме того, о них известно следующее:

- Все, кроме Антонова и Глебова, уже женаты.

- Невесте Егора очень не нравится фамилия ее жениха.

- Фамилия Глеба совпадает с именем Иванова.

- Жены Дмитриева и Ивана - родные сестры.

- Тот, чье имя совпадает с фамилией Бориса, женат, и его фамилия

совпадает с именем Егорова.

- Иван, Егор и Василий - брюнеты.

- Остальные четверо, в числе которых Иванов, Егоров и Васильев, -

блондины.

Как фамилия Василия?

Ответ

фамилия Бориса - Васильев,

а Василия - Дмитриев.

Егор - Глебов.

Иванова зовут Антон

Глеб имеет фамилию Антонов

имя Егорова – Дмитрий

Задача 16

Семья, состоящая из отца, матери и трех дочерей - Ани, Веры и Cветы, - купила телевизор. Каждому, конечно, хотелось посмотреть передачу в первый вечер.

- Нам нужно распределить обязанности, чтобы не остаться без ужина, - сказал папа.

- Правильно, - поддержала мама. - Но только когда ты будешь смотреть передачу, я тоже сяду у телевизора.

- Хорошо, - согласился папа. - Кому из нас повезло, так это Свете и Вере, - улыбнулся папа.

- По крайней мере, одна из них получит удовольствие.

- А нам с тобой, Анечка, придется смотреть передачу только по очереди, - сказала мама.

- Я согласна, - ответила Аня. - Только ты нам разреши с Верой вместе работать на кухне или вместе быть у телевизора.

- Пожалуй, Свету одну нельзя оставлять, - сказал папа. - Если она пожелает смотреть передачу, то придется и мне с Верой посидеть с ней.

Все предложения были приняты. Кто смотрел передачу в первый вечер?

Задача 17

Четыре молодых рабочих - Антонов, Петров, Степанов и Демьянов - работают на одном предприятии и учатся заочно. Как составить для них график свободных от работы дней в первые четыре дня, исходя из таких условий производства:

1) если во вторник выходными будут Демьянов или Антонов, то Степанову нужно дать выходной в понедельник;

2) если Демьянова освободить от работы в четверг, то Антонова нужно освободить в понедельник, и Степанова в среду;

3) если Степанова освободить от работы во вторник или Демьянова освободить в среду, то Петрову нужно давать выходной день в четверг;

4) если Антонов будет освобожден в среду, то у Петрова выходной день будет во вторник, а если Петрову поставить выходной в среду, то Антонов может не приходить на работу во вторник;

5) если Демьянову высвободить понедельник, то у Степанова выходной придется на среду, а если Демьянов получит выходной в среду, то тогда Антонов может не приходить на работу во вторник.

 

Задача 18

Пять мальчиков играли во дворе в футбол и разбили мячом окно.

Ваня сказал: "Это или Паша, или Денис".

Паша сказал: "Это сделал не я и не Вова".

А Вова сказал: "Это сделал не Митя".

А бабушка сидела на лавочке и всё видела, но не выдала того, кто разбил окно. Но ведь вы и сами догадаетесь.

Ответ

Окно разбил Денис.

Задача 19

 

В отделении Сбербанка работают: кассир, контролер и заведующий. Их фамилии: Борисов, Иванов и Сидоров. Кассир не имеет ни братьев, ни сестер и меньше всех ростом. Сидоров женат на сестре Борисова и ростом выше контролера. Назовите фамилии кассира, контролера и заведующего.

Ответ

Борисов - контролер,

Иванов - кассир,

Сидоров – заведующий

 

Задача 20

Обсуждался вопрос о включении в состав сборной команды пяти молодых игроков: Асеева, Валеева, Сватеева, Деева и Евтеева.

Выбор обусловлен следующими условиями:

1) В команду необходимо включить не менее чем одного из трех игроков: Асеева, Валеева, Евтеева, но не более чем одного из трех игроков: Асеева, Сватеева, Деева.

2) Сватеева можно включить в сборную без Валеева тогда и только тогда, когда Асеев будет включен, а Деев не будет включен.

3) Если Валеев будет включен в сборную, а Сватеев не будет включен, то сборную нужно пополнять и Деевым, и Евтеевым.

4) Если Асеев не будет включен в команду, то нужно в нее включить и Сватеева, и Евтеева.

Кого из игроков можно включить в сборную команду?

Задачи повышенной сложности

Пример задачи (пять измерений)

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

1. Они растят 12 разных растений.

2. У каждого — по четыре разных растения.

3. Каждое растение встречается, как минимум, в одном саду.

4. Только одно растение встречается сразу в четырех садах.

5. Только в одном саду — все три вида урожая.

6. Только в одном саду — все четыре разных растения одного вида урожая.

7. Персики растут только в двух соседних садах.

8. Сад Павла — в центре. Лилий там нет.

9. Тот, кто разводит астры, не выращивает овощи.

10. Любитель роз, не выращивает петрушку.

11. Садовник, у которого есть орехи, выращивает как тыкву, так и петрушку.

12. В первом саду — яблоки и вишня.

13. Вишня растет только в двух садах.

14. В саду у Александра — и лук, и вишня.

15. Алексей выращивает два разных вида фруктов.

16. Тюльпаны — только в двух садах.

17. Яблони растут только в одном единственном саде.

18. Только в одном саде, том, что рядом с садом Петра, растет петрушка.

19. Сад Александра — не крайний.

20. Иван не выращивает ни овощи, ни астры.

21. В саду Павла — три разных вида овощей.

 

Вопрос:

У кого какой сад, и что там растет?

Ответ:

Иван - персики, яблоки, вишня, розы

Александр - вишня, лук, розы, тюльпаны

Павел - морковь, тыква, лук, розы

Петр - астры, розы, тюльпаны, лилии

Алексей - персики, орехи, тыква, петрушка

 

Задача Эйнштейна (шесть измерений)

А. Эйнштейн придумал эту задачу в XIX веке и полагал, что 98% жителей Земли не в состоянии ее решить.

Условия задачи.

1. Есть 5 домов каждый разного цвета.

2. В каждом доме живет один человек, отличающийся от соседнего по национальности: немец, англичанин, швед, датчанин, норвежец.

3. Каждый пьет только один определенный напиток, курит определенную марку сигарет и держит определенное животное.

4. Никто из 5 человек не пьет одинаковые с другими напитки, не курит одинаковые сигареты и не держит одинаковое животное.

Вопрос: кому принадлежит рыба?

Подсказки:

1. Англичанин живет в красном доме.

2. Швед держит собаку.

3. Датчанин пьет чай.

4. Зеленый дом стоит слева от белого.

5. Жилец зеленого дома пьет кофе.

6. Человек, который курит Pall Mall, держит птицу.

7. Жилец из среднего дома пьет молоко.

8. Жилец из желтого дома курит Dunhill.

9. Норвежец живет в первом доме.

10. Курильщик Marlboro живет около того, кто держит кошку.

11. Человек, который держит лошадь, живет около того, кто курит Dunhill.

12. Курильщик сигарет Winfield пьет пиво.

13. Норвежец живет около голубого дома.

14. Немец курит Rothmans.

15. Курильщик Marlboro живет по соседству с человеком, который пьет воду.

Это всё, что необходимо для решения задачи.

Ответ

: Хозяин рыбы - немец.


[1] В оригинале использован термин Пролога «cut», и при переводе точнее было бы применить термин «сокращение». Однако, следуя терминологии более ранних публикаций о Прологе, традиционно используется термин «отсечение».—[9, стр. 91]







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.226.243.36 (0.076 с.)