Программа решающая логические задачи

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Методы решения логических задач | Онлайн-школа Альфа. 5-6 класс

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

README.md

Solver logical problem via prolog

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

  1. К нему в комнату заходили только Андрей, Фери, Илон, Катя и Шаньи, другому никому он книг не давал
  2. Он всегда строго придерживался правила: одна книга в одни руки.
  3. Фери как-то раз брал у него Диккенса, но давно возвратил. так что вторично взять эту книгу Фери не мог.
  4. У Андрея 2 литературные «привязанности»: Стихи Аттилы Йожефа и романы Ж.ля Верна (книги других авторов Андрей взять не мог!)
  5. Катя отдает предпочтение литературе ХХ века
  6. Илон читака произведения только венгерских авторов
  7. Шаньи — незименный почитать поэзии. (всей остальной летаратуры для него не существует!) Все ли правильно вспомнил Пишта?

Нужно написать программу решающую эту логическую задачу.

  1. Install swi prolog
  2. Run main.pl

— ? answer(X1,Y1, X2,Y2, X3,Y3, X4,Y4, X5,Y5) . — false

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

Сделаем сводную таблицу, если любая строка или столбец будет весь заполнен, то задача не имеет решения.

_ Верн Диккенс Мориц Янош Атилла
Андрей
Фери
Илон
Катя
Шаньи

Топ задач на логику. Решаем вместе с математиком!

В рассматриваемом случае задача не имеет решения потому, что никто из 5 ребят не мог взять томик Диккенса.

About

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

Источник: github.com

Практическое занятие 5. Решение логических задач

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

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

Читайте также:
Программа для Андроид когда звонят

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

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

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

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

Источник: studfile.net

VII Международная студенческая научная конференция Студенческий научный форум — 2015

ИСПОЛЬЗОВАНИЕ ЯЗЫКА ПРОЛОГ ДЛЯ РЕШЕНИЯ ЛОГИЧЕСКИХ ЗАДАЧ

Федорова А.А. 1

1 Московский государственный областной социально-гуманитарный институт факультет математики, физики, химии, информатикиМосковский государственный областной социально-гуманитарный институт факультет математики, физики, химии, информатики

Работа в формате PDF

Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке «Файлы работы» в формате PDF

Пролог (Prolog, программирование в логике) — один из наиболее широко используемых языков логического программирования.

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

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

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

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

Создание логического программирования можно приписать Ковальскому и Колмероэ. Логическое программирование возникло главным образом благодаря успехам в автоматическом доказательстве теорем, в частности благодаря разработке принципа резолюции. Одно из первых исследований, связывающих резолюцию с программированием для ЭВМ, было предпринято Грином. Общая идея, состоящая в рассмотрении логических предложений как операторов в программах, а управляемого вывода – как исполнения программ, была исследована Хайсом, Сандвеллом и другими. Однако осознанию того, что логика является исполняемым языком программирования, в особенности способствовала процедурная интерпретация Ковальского.

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

Читайте также:
Какая то программа грузит процессор

Язык Пролог является представителем семейства языков логического программирования. Пролог основан на теории предикатов первого порядка. Фактически, Пролог, это не язык для программирования, а язык для описания данных и логики их обработки. Базовый принцип языка – декларативность, т.е. равнозначность представления данных. Утверждения, записанные в Прологе, это одновременно и записи, и правила, которые содержат способы обработки данных.

В сравнении с традиционными языками программирования, предназначенными для записи алгоритмов, такими как Бейсик, Фортран, Паскаль, Си, обладает существенными особенностями:

• программа на Прологе не является алгоритмом, а представляет собой запись условия задачи на языке формальной логики (т.е. это дескриптивный, описательный язык программирования);

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

• Пролог требует особого стиля мышления программиста, что затрудняет изучение его теми, кто уже привык к процедурному программированию; однако во многих странах (Японии, Англии, Франции, Германии, Израиле и т.д.) расширяется практика применения Пролога в образовании как первого изучаемого языка программирования; переход к процедурным языкам типа Паскаля в этом случае трудностей не вызывает.

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

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

Работа в Прологе состоит из следующих этапов:

  1. объявление фактов об объектах и отношениях между ними;
  2. определение правил взаимосвязи объектов и отношений между ними;
  3. формулировка вопроса об объектах и отношениях между ними.

Программировать на Прологе — значит описывать некий мир. Программа на этом языке состоит из множества фраз, задающих взаимосвязь между объектами. Каждый объект обозначает ту или иную сущность, принадлежащую миру. Один из способов описания — это задание фактов.

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

Например, «Завтра понедельник» или «Пете 13 лет». На Прологе это запишется в виде:

Теперь зададим вопросы интерпретатору Пролога, например:

?- «Завтра понедельник», «Пете 13 лет».

Запятая между фактами в последнем запросе означает операцию логического умножения (конъюнкцию). Такая форма записи соответствует логике высказываний, возможности которой, как уже говорилось, достаточно ограничены. Мы не можем задать, например, вопрос о том, сколько лет Пете. Естественно, гораздо удобнее использовать факты с параметрами, работу с которыми поддерживает логика предикатов. На Прологе факт может быть записан в виде предиката, аргументы которого являются символьными или числовыми константами.

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

Читайте также:
Программы которые подключает два компьютера

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

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

Пример. Факт «Маша купила конфету» на Прологе запишется следующим образом:

Здесь предикат «купила» имеет два аргумента: первый означает имя человека, а второй – предмет покупки. Факт «Пете 13 лет» можно представить в виде:

Порядок аргументов предиката связан со смыслом факта и поэтому не изменяем. При записи фактов надо помнить, что:

  • имя факта начинается со строчной буквы;
  • запись каждого факта заканчивается точкой.

Все факты в прологе складываются в базы данных. База данных на Прологе — это совокупность фактов. В процессе работы в базу данных можно добавлять новые факты, удалять или изменять старые.

Кроме фактов в Прологе существуют правила, позволяющие получать дополнительные знания о том мире, который описывает программа. Правило задает новый предикат через определенные ранее.

Правило состоит из головы (предиката) и тела (последовательности предикатов, разделенных запятыми). Голова и тело разделены знаком » :- » (если) и, подобно каждой фразе Пролога, правило должно заканчиваться точкой. Запятая в теле правила означает конъюнкцию (, логическое и).

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

Пример. Правило, определяющее отношение «ниже» через отношение «выше», запишется следующим образом:

ниже(X, Y) :- выше(Y, X).

Это означает, что если человек Y выше человека X, то X выше Y. Здесь X и Y — переменные.

Задача 1. Дана база данных «Дни Рождения». Составить следующие запросы: Кто родился в 2001 году? У кого день рождения 6 числа? Когда день рождения у Антона? Есть ли у кого-то день рождения в ноябре?

Есть ли у кого-то день рождения в апреле?

%день_рождения(Имя,Фамилия,_,_,2001). %Кто родился в 2001 году?

%день_рождения(Имя,Фамилия,6,_,_). %У кого день рождения 6 числа?

%день_рождения(«Антон»,Фамилия,День,Месяц,Год).%Когда день рождения у Антона?

%день_рождения(_,_,_,»ноябрь»,_). %Есть ли дни рождения в ноябре?

день_рождения(_,_,_,»апрель»,_). %Есть ли дни рождения в апреле?

Задача 2. База данных “Колобок”: ушел(колобок,дедушка), ушел(колобок, бабушка), ушел(колобок, заяц), ушел(колобок, волк), ушел(колобок, медведь), не_ушел(колобок, лиса). Сформулировать вопросы на Прологе:Кто ушел от волка? Кто не ушел от лисы? Кто ушел от волка и от бабушки? Какой следует задать вопрос, чтобы узнать всех персонажей сказки?

%ушел(Кто,»Волк»). %Кто ушел от волка?

%не_ушел(Кто,»Лиса»). %Кто не ушел от лисы?

%ушел(«Колобок»,От_Кого). %От кого ушел колобок?

Задача 3. База данных “Режим дня”: занятие(00.00, 7.30, сон), занятие(7.30, 8.00, завтрак), занятие(8.00, 13.00, школа), занятие(13.00, 14.00, обед), занятие(14.00, 19.00, прогулка), занятие(19.00, 20.00, ужин), занятие(20.00, 22.00, отдых), занятие(22.00, 24.00, сон). Сформулировать вопросы на Прологе: Когда бывает обед? Что бывает между 14 и 19 часами? Когда бывает сон?

Источник: scienceforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru