Реферат: Логические задачи на языке программирования Prolog

Логическиезадачи на языке программирования  Prolog Задание1.

1.    Ввести предложенный текстпрограммы, реализовать ее и записать на диск.

   predicates

   hello.

  goal

   hello.

  clauses

   hello:-

            makewindow(1,7,7,«Моя первая программа»,4,56,14,22),

            nl, write(«Введите ваше имя,\n»,«затем нажмите Enter.»),

            cursor(4,6),

            readln(Name),nl,

            write(«Добро пожаловать\n вPDC Prolog,\n»,"",Name,"!").

Результат: Добро пожаловать в PDC Prolog, Vladimir!

 

2.    Умышленно ввести опечатки в текстпрограммы и ознакомиться с сообщениями об этих опечатках, исправить их.

   predicates

   hello.

  goal

   hello.

  clauses

   hello:-

        makewindow(1,7,7,«Мояпервая программа»,4,56,14,22)

        nl, write(«Введитеваше имя,n»,«затем нажмите Enter.»),

        cursor(4,6),

        readln(Name)nl,

        write(«Добропожаловать\n в PDC Prolog,\n»,",Name,!").

Результат: 423  Syntax eror.

Задание2.

Реализовать программу с вводом перечисленных ниже целей ипроверить получаемые результаты. Цели внешние.

predicates

            book(symbol,symbol,symbol,integer).

clauses

            book(«Фигурнов В.Э.»,«IBM PC дляпользователя»,«ФиС»,1988).

            book(«ПетуховО.А.»,«Проектирование ОРБД»,«Судостроение»,1984).

            book(«ПетуховО.А.»,«Объектно-реляционные моделиданных»,«СЗПИ»,1987).

            book(«ПетуховО.А.»,«Моделирование СМО»,«СЗПИ»,1989).

            book(«Петухов О.А.»,«PDCProlog»,«СЗПИ»,2000).

            book(«Анкудинов Г.И.»,«Теорияавтоматов»,«СЗПИ»,1997).

            book(«Николаев В.И.»,«Дискретныеструктуры»,«СЗПИ»,1999).

Результат:  X= Proektirovanie OR BD, Y=SUDOSTROENIE, Z=1984

                    X=Object modelsof DATA, Y=SZPI, Z=1987

                    X=ModelirovanieCMO, Y=SZPI, Z=1989

                    X=PDC Prolog,Y=SZPI, Z=2000

                    4 Solutions

                    X=Proektirovanie OR BD

                    X=Object modelsof DATA

                    X=ModelirovanieCMO

                    X=PDC Prolog

                    4 Solutions

                    E=PetuchovO.A., X=Object models of DATA, Z=1987

                    E=PetuchovO.A., X=Modelirovanie CMO, Z=1989

                    E=PetuchovO.A., X= PDC Prolog, Z=2000

                    E=AnkudinovG.I., X=Automat theory, Z=1997

                    E=NikolaevV.I., X=Diskretniye struktury, Z=1999

                    5 Solutions

           

Задание3.

Реализовать программу с вводом всех перечисленных внешнихцелей и проверить получаемые результаты:

domains

            name=symbol

            year_in, year_out =integer

predicates

            parents(name,name)

            woman(name)

            man(name)

            offspring(name,name)

            father(name,name)

            mother(name,name)

            parent_parents(name,name)

            brother(name,name)

            grandfather(name,name)

            grandmother(name,name)

            emperor(name,year_in,year_out)

            emperor_was(name,integer)

clauses

            parents(«Петр III»,«Павел I»).

            parents(«ЕкатеринаII»,«Павел I»).

            parents(«Павел I»,«Александр I»).

            parents(«Павел I»,«Николай I»).

            parents(«НиколайI»,«Александр II»).

            parents(«АлександрII»,«Александр III»).

            parents(«Александр III»,«НиколайII»).

            woman(«Екатерина II»).

            man(«ПетрIII»).

            man(«Павел I»).

            man(«Алексндр I»).

            man(«Николай I»).

            man(«Александр II»).

            man(«Александр III»).

            man(«Николай II»).

            offspring(Y,X):-parents(X,Y).

            father(X,Y):-parents(X,Y),man(X).

            mother(X,Y):-parents(X,Y),woman(X).

            parent_parents(X,Z):-parents(X,Y),parents(Y,Z).

            brother(X,Y):-parents(Z,X),parents(Z,Y),man(X),X<>Y.

            grandfather(X,Y):-father(X,Z),father(Z,Y).

            grandmother(X,Y):-mother(X,Z),father(Z,Y).

            emperor(«Петр III»,1761,1762).

            emperor(«ЕкатеринаII»,1762,1796).

            emperor(«Павел I»,1796,1801).

            emperor(«Александр I»,1801,1825).

            emperor(«Николай I»,1825,1855).

            emperor(«АлександрII»,1855,1881).

            emperor(«Александр III»,1881,1894).

            emperor(«Николай II»,1894,1917).

            emperor_was(X,Y):-emperor(X,A,B),Y>=A,Y<=B.

Результат: Y=aleksandr I      X=petr III, A=1761,B=1762                  X=pavel I

                    1Solution           X=ekaterina II, A=1762, B=1769           1 Solution

                                              X=pavel I, A=1796, B=1801

                                              X=aleksandr I, A=1801, B=1825

                                              X=nikolay I, A=1825, B=1855

                                               X=aleksandrII, A=1855, B=1881

                                              X=aleksandr III, A=1881, B=1894

                                              X=nikolay II, A=1894, B=1917

                                              8 Solutions

Задание4.

1. Реализоватьприведенную программу:

domains

            name=symbol

predicates

            star(name)

            planet(name)

            revolve(name,name)

            satellite(name,name).

goal

            satellite(X,«Марс»),

            write(X," спутникМарса."),

            nl.

clauses

            star(«Солнце»).

            planet(«Земля»).

            planet(«Марс»).

            revolve(«Земля»,«Солнце»).

            revolve(«Марс»,«Солнце»).

            revolve(«Луна»,«Земля»).

            revolve(«Фобос»,«Марс»).

            revolve(«Деймос»,«Марс»).

            satellite(X,Y):-planet(Y),revolve(X,Y).

Результат: Фобос спутник Марса.

2.    Написать и реализовать программуустановления родственных связей: Василий имеет дочь Ольгу, у которой два сынаМихаил и Максим. Использовать внешние и внутренние цели.

domains

              name=symbol

predicates

               men(name)

               mama(name)

               sons(name,name)

               doughter(name,name)

               deda(name,name)

               brother(name,name).

goal

               doughter(Z,Y),

               write(Z,Y),

               nl.

clauses

               men(“Vaciliy”).

               men(“Michail”).

               men(“Maxim”).   

               mama(“Olga”).

               sons(“Michail”,”Olga”).

              sons(“Maxim”,”Olga”).

              doughter(“Olga”,”Vasiliy”).

               deda(X,Y):--men(X),men(Y),sons(X,Y),doughter(Z,Y).

               brother(X,Y):--men(X),men(Y), sons(X,Z),sons(Y,Z),X<>Y.

Результат:  Olga, Vaciliy

Задание5.

1.   Реализовать следующую программу: Получить псевдослучайные вещественные числа в диапазоне от 0 до 1.

goal     

            random(X),

            Z=X,

            write(«Псевдослучайное вещественное числоот 0 до 1: »,Z),

            nl.

Результат:  0,64823988962

2.   Получить случайные целые числа вдиапазоне от 0 до 10 и от 10 до 35.

goal     

            random(10,X),

            Z=X,

            write(«Псевдослучайное вещественное числоот 0 до 10: »,Z),

            nl.

Результат: 5

goal     

            random(25,X),

            Z=X++10,

            write(«Псевдослучайное вещественное числоот 10  до  35:,Z),

            nl.

Результат: 21

Задание6.

1.  

/> <td/> />
Реализовать приведеннуюпргограмму для вычисления

goal                 

            write(»X ="),

            readint(X),

            nl,

            write(«K =»),

            readreal(K),

            nl,

            Z=exp(sin(X))+sqrt(K+X*X),

            write(«Z = »,Z).

Результат: X=5, K=16,  Z=6,7864292326

2.   В режиме калькулятора вычислить X =(2 + 5) * 3,4, т.е. вводя значения 2, 5, 3.4 с клавиатуры.

goal                 

            write(«X = „),

            readint(X),

            nl,

            write(“K =»),

            readint(K),

            nl,

             write(“N= “),

             readreal(N),

             nl

            Z=(X+K)*N,

            write(«Z =»,Z).

Результат: 23,8

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

predicates

            operation(symbol,real,real)

clauses

            operation("+",X,Y):-Z=X+Y,

                        write(X,"+",Y,"=",Z),

            nl.

            operation("-",X,Y):-Z=X-Y,

                        write(X,"-",Y,"=",Z),

            nl.

            operation("*",X,Y):-Z=X*Y,

                        write(X,"*",Y,"=",Z),

            nl.

            operation("/",X,Y):-Z=X/Y,

                        write(X,"/",Y,"=",Z),

            nl.

Результат: Z=8+2            Z=8-2            Z=8*2              Z=8/2

                   Z=10              Z=6                Z=16               Z=4    

                   1 Solution      1 Solution       1 Solution       1 Solution

2.Реализовать эту жепрограмму с внутренней целью

predicates

            operation(symbol,real,real)

Goal

             write(“Vveditechisla”),

             nl,

             readreal(X),

             nl,

             readreal(Y),

             nl,

             operation(“+”,X,Y),

             operation(“-“,X,Y),

             operation(“*”,X,Y),

             operation(“/ “,X,Y).

clauses

            operation("+",X,Y):-Z=X+Y,

                        write(X,"+",Y,"=",Z),

            nl.

            operation("-",X,Y):-Z=X-Y,

                        write(X,"-",Y,"=",Z),

            nl.

            operation("*",X,Y):-Z=X*Y,

                        write(X,"*",Y,"=",Z),

            nl.

            operation("/",X,Y):-Z=X/Y,

                        write(X,"/",Y,"=",Z),

            nl.

Результат: Vvedite chisla

                    2

                    4

                    2+4=6

                    2-4=-2

                    2*4=8

                    2/4=0,5

Задание9.

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

domains

              name=symbol

predicates

               men(name)

               mama(name)

               sons(name,name)

               doughter(name,name)

               deda(name,name)

               brother(name,name).

goal

               deda(X,”Vaciliy”),

               write(X,”Vaciliy”),

               nl.

clauses

               men(“Vaciliy”).

               men(“Michail”).

               men(“Maxim”).   

               mama(“Olga”).

               sons(“Michail”,”Olga”).

              sons(“Maxim”,”Olga”).

              doughter(“Olga”,”Vasiliy”).

               deda(X,Y):--men(X),men(Y),sons(X,Y),doughter(Z,Y),nl,

               write(“ “,X),nl,fail.

               brother(X,Y):--men(X),men(Y), sons(X,Z),sons(Y,Z),X<>Y.

Результат:  Michail

                    Maxim

Задание10.

Реализовать программы вычисления суммы следующих рядов:

1.    1 + 2 + 3 +… + 9 + 10

2.    2 + 4 + 6 +… + 14 + 16

3.    10 + 9 + 8 +… + 2 + 1

4.    1 + 3 + 5 +… + 13 + 15

domains

              number,sum=integer

 predicates

               sum(number,sum)

goal

               write(“Сумма ряда :  “),

               sum(1,sum), write(sum).

clauses

                sum(11,0).

                sum(Number, Sum):--

                 New_number=Number+1,

                 sum(New_number,Partial_sum),

                 Sum=Number+Partial_sum.

Результат: Сумма ряда: 55

domains

              number,sum=integer

 predicates

               sum(number,sum)

goal

               write(“Сумма ряда:  “),

               sum(2,sum), write(sum).

clauses

                sum(18,0).

                sum(Number, Sum):--

                 New_number=Number+2,

                 sum(New_number,Partial_sum),

                 Sum=Number+Partial_sum.

Результат:  Сумма ряда: 72

domains

              number,sum=integer

 predicates

               sum(number,sum)

goal

               write(“Сумма ряда:  “),

               sum(9,sum), write(sum).

clauses

                sum(0,11).

                sum(Number, Sum):--

                 New_number=Number-1,

                 sum(New_number,Partial_sum),

                 Sum=Number+Partial_sum

Результат: Сумма ряда: 55

domains

              number,sum=integer

 predicates

               sum(number,sum)

goal

               write(“Сумма ряда:  “),

               sum(1,sum), write(sum).

clauses

                sum(17,0).

                sum(Number, Sum):--

                 New_number=Number+2,

                 sum(New_number,Partial_sum),

                 Sum=Number+Partial_sum.

Результат: Сумма ряда: 64

Задание12.

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

domains

               town_list=town*

               town=symbol

predicates

               towns(town_list)

goal

               towns([A,B,C,D,E]),

              write(A,”,”,B,”,”,C,”,”,D,”,”,E).

clauses

            towns([ “Kazan”,”Nignekamsk”,”Elabuga”,”Bugulma”,”Almetevsk”]).

Результат:  Kazan, Nignekamsk,Elabuga, Bugulma, Almetevsk
еще рефераты
Еще работы по информатике, программированию