Был у нас на третьем курсе предмет “логическое и функциональное программирование”. Учили мы лисп и турбо пролог (turbo prolog). Кроме того, была у нас РГР, которую можно было делать на турбо прологе или Amzi. Отличительная особенность Amzi - возможность интеграции программы на прологе с программами на других языках программирования. Возможностью интеграции с Delphi я активно пользовался при написании программ себе и не только =) Т.е. Логика писалась на прологе, а интерфейс на Delphi.

Как показала практика - во многимх ВУЗах до сих пор учат пролог. Потому предлагаю вашему вниманию подборку писанных мною программ с кратким описанием что они делают. С учетом того что писалось это года четыре назад - многое уже не вспомню, так что напишу что смогу.

Сразу скажу, что учил turbo prolog и amzi prolog. С другими дистрибутивами, про которые меня периодически спрашивают (Strawberry prolog, Visual prolog), я не пересекался и в эттих вопросах при всем моем желании помочь ничем не смогу.

Также просьба отписываться в каком городе и в каком ВУЗе вы учите пролог.

Итак, приступим.

Арканоид

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

ImageShack

Арканоид на прологе

Арканоид. Исходники

Сапер

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

ImageShack

Сапер на прологе

Сапер. Исходники

Поддавки

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

ImageShack

Поддавки на прологе

Поддавки. Исходники

Морской бой

Умеет расставлять корабли, стреляет по пустым клеткам, а если нашел корабль - старается добить.

 

ImageShack

Морской бой на прологе

Морской бой. Исходники

Тетрис

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

 

ImageShack

Тетрис на прологе

Тетрис. Исходники

Крестики-нолики

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

 

ImageShack

Крестики-нолики 3х3х3 на прологе

Крестики-нолики 3х3х3. Исходники

 Есть еще несколько программок. Но сейчас не припомню что они делают и как. Может еще допишу как вспомню.


Comments

24 Comments so far

  1. Ирочка on Октябрь 20, 2008 19:21

    Клёвые программки, а случайно не сталкивался с прогой, которая должна отличать электр. цепь, соедин-я в ЗВЕЗДУ от соедин-й в ТРЕУГОЛЬНИК? заранее спасибо

  2. Well on Декабрь 3, 2008 21:20

    Прив учусь в ринхе в городе Аксае на курсовую нужна программка желательно на прологе и по проще можеш чем нить помочь ? )

  3. Shedar on Декабрь 3, 2008 21:23

    Well, Если те что выше не подходят, то могу поискать консольные варианты под turbo prolog

  4. dwyane on Декабрь 5, 2008 13:29

    привет, учусь в Калининграде в БГА.
    шчень сильно нужна прога на пролге “Реализация алгоритма шифрования mars”

  5. Shedar on Декабрь 7, 2008 00:49

    dwyane, к сожалению, такого не писал. А поскольку уже лет пять как не писал ничего на прологе, то написать реализацию сейчас не смогу без основательного вспоминания языка, на что нет времени =(

  6. Лена on Декабрь 17, 2008 14:40

    у меня курсовик - задача на прологе
    у меня к вам вопрос-сможете ли помочь с написанием?
    ответьте, пожалуйста, на почту, тогда я все распишу подробнее.
    Единственное - говорят, программа - 10 строчкек

  7. Freya on Декабрь 18, 2008 16:04

    привет, учусь в Самарском Аэрокосе, на факе информатики… нужна программа об оптимизациий пути коммивояжора на прологе.

  8. Вика on Декабрь 18, 2008 22:34

    Приветы!)
    я с Украины, учусь в КНУ имени Тараса Шевченка, ф-т кибернетики. Вот тоже учим пролог, поскачивала твои игрушки, буду разбираться в коде))) спасибо! есть же добрые люди!))

  9. Lex on Декабрь 23, 2008 00:57

    Люди. Я из Тулы. Нужна прога, которая считает сумму всех диагоналей матрицы(диагонали с лева на право, в обратную не надо). Помогите,я как нить рассчитаюсь со спасителем!!! :(

  10. Lex on Декабрь 23, 2008 00:58

    да забыл у точнить…программа на прологе.

  11. Евгений on Март 6, 2009 10:51

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

  12. Shedar on Март 9, 2009 14:41

    2Евгений:
    посмотрите темы на форуме винграда, там есть ссылки и на литературу и на лекции и есть люди с которыми можно пообщаться - Винград

  13. pas007 on Март 15, 2009 18:49

    Вот текст задания, кто возьмется..сообщите..Договорится о цене. pasweb@mail.ru

    Королев В.П.
    Тема №14. Разработка базы знаний «Учет подержанных автомобилей» на языке Пролог
    Требования
    1. В программе должен быть реализован удобный интерфейс пользователя (с
    разветвленной системой меню и возвратом после окончания выбранной операции в
    меню).
    2. База данных программы должна содержать следующую информацию об автомобилях:
    • марка автомобиля,
    • модель автомобиля,
    • класс.
    • год выпуска,
    • объем двигателя,
    • цвет,
    • состояние (хорошее, аварийное и т.д.),
    • цена (у.е.)
    3. Программа должна осуществлять пять основных операций при работе с базой данных:
    • просмотр базы данных фактов,
    • добавление новых записей в базу данных,
    • удаление записи из базы данных,
    • редактирование записи базы данных,
    • поиск информации в базе данных.
    4. Поиск информации в базе данных должен осуществляться как «по образцу» (т.е. на
    совпадение критерия поиска с одним из полей записи в базе данных), так и по
    частичному совпадению с ключом поиска (т.е. осуществлять поиск подстроки в строке).
    Реализовать поиск ответов на следующие запросы:
    • список автомобилей (марка, модель, класс и год выпуска), содержащих в наименовании модели указанному пользователем подстроку;
    • список автомобилей, цена которых лежит в указанном пользователем диапазоне (от … до …);
    • список автомобилей, выпущенных в указанном пользователем году и имеющих хорошее состояние,
    • список автомобилей указанного пользователем класса, объем двигателя которых не превышает заданный.

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

  14. Василий on Апрель 20, 2009 21:29

    Здравствуйте. Я учусь в Белгородском Государственном Университете. Если не сложно, помогите с кодом для amzi prolog. Программа при помощи рекурсии должна находить наименьшее общее кратное двух чисел. Заранее спасибо.

  15. Shedar on Апрель 22, 2009 00:53

    Василий, я сам давно на прологе ничего не писал. С простыми вопросами - лучше на форум. Могу посоветовать Раздел Prolog на Progz.ru - один из лучших русскоязычных форумов, посвященных прологу.
    Если же будут задачи посерьезней - могу посоветовать человека, который еще пролог не забросил, но на бесплатные консультации у него времени не хватает.

  16. Лена on Май 4, 2009 13:16

    Очень нужна программа поиска с предпочтением.Плиззз!!!

  17. Лиза on Июнь 1, 2009 08:54

    Я учусь в Иркутске мне для курсовой нужна программка сортировки. Помогите пожалуйста !!!!!

  18. Роман on Июнь 30, 2009 13:28

    Здравствуйте, сколько будет стоить сделать эти лабы, и какое время потребуется?
    желательно писать сюда: icq: 426182710

    1. Написать родословную (любую).
    2. Составить справочник (телефонные, энциклопедию).
    3. Используя 1 задачу составить вопрос, согласно которому он выведет всех родственников одного пола, определенного возраста.
    4. Используя 2 задачу составить вопрос, согласно которому он выведет информацию конкретного человека; информацию конкретного типа (по улице, городу).
    5. Написать какое либо правило на естественном языке и на языке Пролог.

  19. Shedar on Июнь 30, 2009 15:26

    Роман, отправил на почту контакты человека, который может помочь.

  20. Владимир on Октябрь 7, 2009 08:58

    СФУ, г. Красноярск
    Нужна помощь с прологом. Программа которая умеет переставлять кубики в определенную последовательность (зная текущее положение переставить в определенном порядке). Подскажи кто поможет. Не бесплатно, само собой.

  21. BZ on Январь 10, 2010 01:16

    Приветствую! В СПбГМТУ - “корабелка” через 5 дней экзамен по SWI прологу. Курс был, но очень краткий. Задачи уровня “конвертер римские-арабские числа”, “оформление вывода графов атомов в файл” и пр. Пожалуйста, посоветуйте что-нибудь почитать на тему таких задачек (и не только) eBook конспектов какой-нибудь.
    PS Тут кармы нет, так что совсем обнаглею … не завалялся ли лишний инвайт на хабр? ;)

  22. Shedar on Январь 10, 2010 06:48

    BZ, затрудняюсь что-то посоветовать, поскольку сам уже лет 6-7 с прологом не пересекаюсь. Лучше такие вещи спросить на форумах типа винграда (forum.vingrad.ru) и прогз (http://www.progz.ru/forum/index.php?showforum=10).
    Инвайтов на хабр нету.
    Небольшой бонус для повышения кармы (не той, что на хабре =) ):

    num(77,1000). /*M*/
    num(68,500). /*D*/
    num(67,100). /*C*/
    num(76,50). /*L*/
    num(88,10). /*X*/
    num(86,5). /*V*/
    num(73,1). /*I*/
    num([],0).
    
    num([H|[H|T]],R):-
    	integer(H),
    	num(H,Z),
    	num(T,V),
    	2*Z >= V,
    	R is 2*Z+V.
    
    num([H|T],R):-
    	integer(H),
    	num(H,Z),
    	num(T,V),
    	Z >= V,
    	R is Z+V.
    
    num([H|T],R):-
    	integer(H),
    	num(H,Z),
    	num(T,V),
    	Z < V,
    	R is V - Z.
    

    За оптимальность не ручаюсь, таки сколько лет без пролога, и работает только в одну сторону (римские => арабские). Но со всеми примерами в википедии по римским цифрам конвертит правильно. Например так:
    num(”DCCCLXXXVIII”,R).
    R = 888

  23. Максим on Май 18, 2010 22:23

    Здравствуй.
    мне для курсавой нужна прога МОРСКОГО БОЯ написанная на турбо прологе, а то весь семестр работал и пропустил все, а здавать уже через неделю, твоя не работает, помогите пожалуйста.
    Makcum-tlt@yandex.ru

  24. Shedar on Май 18, 2010 23:30

    Здравствуй, Максим.
    К сожалению, помочь не могу при всём желании. У меня сейчас стоит Win x64. И Турбо пролог просто не запускается. Искать решение проблемы с запуском времени нет.
    Могу лишь посоветовать пройтись по форумам прогз и винград, может там найдется кто-то, у кого есть реализация морского боя или кто поможет с ней.

Name (обязательно)

Email (обязательно)

Сайт

Speak your mind