
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.81] |
![]() |
|
Сообщ.
#1
,
|
|
|
Нужно написать на языке Prolog программу для решения известной задачи о волке, козе и капусте. Программа должна быть написана в visual prolog 5.2
Ранее никогда не работала с данной программой, поэтому прошу у вас помощи. Может у кого-то есть готовая программа. Либо уже именно файл программы, который можно будет запустить. Буду благодарна! Задание: У фермера есть волк, коза и капуста, и все они находятся на левом берегу реки. Необходимо провести это “трио” на правый берег, но в лодку может поместиться что-то одно – волк, коза или капуста. Рискованно оставлять на одном берегу волка вместе с козой, равно как и козу вместе с капустой. |
Сообщ.
#2
,
|
|
|
Она уже есть в 5.2 в качестве примера.
По-моему, копировала её именно оттуда ![]() ![]() 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,!. |