На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Prolog программу для решения известной задачи о волке, козе и капусте , Программа должна быть написана в visual prolog 5.2
    Нужно написать на языке Prolog программу для решения известной задачи о волке, козе и капусте. Программа должна быть написана в visual prolog 5.2
    Ранее никогда не работала с данной программой, поэтому прошу у вас помощи. Может у кого-то есть готовая программа. Либо уже именно файл программы, который можно будет запустить. Буду благодарна!
    Задание: У фермера есть волк, коза и капуста, и все они находятся на левом берегу реки. Необходимо провести это “трио” на правый берег, но в лодку может поместиться что-то одно – волк, коза или капуста. Рискованно оставлять на одном берегу волка вместе с козой, равно как и козу вместе с капустой.
      Она уже есть в 5.2 в качестве примера.
      По-моему, копировала её именно оттуда
      ExpandedWrap disabled
        domains
             Koza,Kapusta,Volk,s=string
            
        database
            danimals(s)
            dcount(integer)
         
        database - prav
            danimals1(s)
            
        determ sum(integer)
            
        predicates
             dialog
             repeat    
             show
             assert_database
             clear_database
             animals(s)
             perevozka
             menu
             process(integer)
             error
             error1
             op_sost
             op_sost1
             inc
             podchet
             proverka
            
        goal    
             dialog.    
            
        clauses
            sum(0).
            
            repeat.
            repeat:-repeat.
            animals("Kapusta").
            animals("Koza").
            animals("Volk").
            assert_database:-
               animals(S),
               assertz(danimals(S)),
               fail.
            assert_database:-!.
            clear_database:-
               retract(danimals(_)),fail.
            clear_database:-!.      
            
            perevozka().
         
            op_sost:-
                 F="Kapusta",Q="Koza",
                 danimals(F),danimals(Q),
                 retract(danimals(F)),
                 retract(sum(I)),I1=I+1,assert(sum(I1)),
                 write("Koza est kapusty:)"),nl.
            op_sost:-!.
            
            op_sost1:-
                 R="Volk",E="Koza",
                 danimals(R),danimals(E),
                 retract(danimals(E)),
                 retract(sum(I)),I1=I+1,assert(sum(I1)),
                 write("Volk est kozy :)"),nl.
            op_sost1:-!.    
            
            show:-danimals(A),write(A),nl,fail.
            show:-!.
            
            inc():-
              retract(dcount(H)),H1=H+1,
              assert(dcount(H1)),!.
            
            podchet:-
              assert(dcount(0)),danimals(T),
              inc(),fail.        
            podchet:-!.
            
            proverka:-
              dcount(X), X<>3,!,retract(dcount(_)),error1,fail.
            proverka:-
              retract(dcount(_)),!.
              
            
            dialog:-    
              assert_database,    
              makewindow(1,7,8,"volk,koza,kapusta ", 0,0,25,75),
              menu,
              clear_database.
            
            menu:-
              repeat,
              clearwindow,
              write("        ******************************************"),nl,
              write("        *                                        *"),nl,
              write("        *   1.posmotret kto na levom beregy      *"),nl,
              write("        *   2. Perevesti                         *"),nl,
              write("        *   3. dobavit na leviy bereg            *"),nl,
              write("        *   4. Pocitat poteri                    *"),nl,
              write("        *   5. Vihod                             *"),nl,
              write("        *                                        *"),nl,
              write("        ******************************************"),
              nl,nl,    
               write("viberite deystvie: "),nl,
            readint(Choice),nl,
            process(Choice),
            Choice = 5,!.
            
            process(1):-
               makewindow(2,7,7,"Leviy bereg",2,20,18,40),    
               show,nl,
               write("Nazmite probel"),
               readchar(_),
               removewindow,!.
            
            process(2):-
              makewindow(2,7,7,"perevozka ",2,20,18,42),
              podchet,
              proverka,    
              write("Kogo vi hotite perevesti"),nl,
              readln(D),
              retract(danimals(D)),
              assert(danimals1(D)),
              op_sost,
              op_sost1,  
              write("Nazmite probel"),
              readchar(_),
              removewindow,!.
            
            process(3):-
               makewindow(2,7,7,"Dobavlenie",2,20,18,42),
               write("kogo vi hotite dobavit na leviy bereg"),nl,
               readln(X),
               assertz(danimals(X)),
               write("Nazmite probel"),
               readchar(_),
               removewindow,!.
            
            process(4):-
              makewindow(2,7,7,"Poteri",2,20,18,42),
              write("poteri ravni = "),
              sum(I1),
              write(I1),nl,nl,
              write("Nazmite probel"),
              readchar(_),
              removewindow,!.
            
            process(5):-
              write("Vi hotite viyti iz programmi? y/n"),nl,
              readln(Z),
              Z="y",!.
            
            process(Choice):-
             Choice<1,error.
            process(Choice):-
             Choice>5,error.
                
           error:-
              write("Ykazite chislo ot 1 do 5"),nl,
              write("nazmite probel dly prodolzeniy"),
              readchar(_).
              
            error1:-
              write("na levom beregy dolzno bit 3 obeckta!"),nl,
              write("nazmite probel dly prodolzeniy"),
              readchar(_),
              removewindow,!.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0209 ]   [ 16 queries used ]   [ Generated: 18.04.24, 13:40 GMT ]