24.12.2012 Views

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

Zbirka zadataka iz Ekspertskih sistema

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

82 1. Pretraživanje<br />

Sledi primer <strong>iz</strong>vršavanja korektnog rešenja pri nalaženju svih različitih otvorenih puteva u<br />

datom lavirintu <strong>iz</strong> tačke a u tačku h:<br />

?- put(a,h,P).<br />

P = [a,c,g,h]? ;<br />

P = [a,c,f,g,h]? ;<br />

P = [a,c,b,f,g,h]? ;<br />

no<br />

Zadatak 33: Problem dva krčaga<br />

Data su dva krčaga zapremina A i B. Na raspolaganju je česma, a voda naravno može i da se<br />

prospe. Potrebno je postići da u jednom od krčaga bude tačno zadata količina vode C.<br />

Napisati program na Lisp-u koji nalazi rešenje opisanog problema.<br />

Anal<strong>iz</strong>a problema<br />

U kojim slučajevima postoji rešenje ovog problema? Prvo, jasno je da C ne sme biti veće i od<br />

A i od B. Drugo, što ne mora biti očigledno, C mora da zadovolji <strong>iz</strong>vesne uslove. Na primer,<br />

ako je B = 2A, C može biti samo A ili 2A. Ako su A i B multipli neke količine X, jasno je da i<br />

C mora biti deljivo sa X. Generalno, zaključujemo da C mora biti multipl najvećeg<br />

zajedničkog delioca (engl. Greatest Common Divisor, skr. GCD) za A i B.<br />

Rešenje<br />

Deo programa koji ispituje uslove za postojanje rešenja je:<br />

(define (krcag A B C)<br />

(cond ((and (> C A) (> C B)) ‘C-preveliko)<br />

((not (zero? (remainder C (gcd A B)))) ‘C-nemoguce)<br />

(else (napuni 0 0 A B C))))<br />

Druga grana konstrukta cond ispituje upravo da li je ostatak deljenja (primitiva remainder)<br />

količine C i najvećeg zajedničkog delioca količina A i B jednak nuli, to jest, da li je C deljivo<br />

sa najvećim zajedničkim deliocem (primitiva gcd) količina A i B..<br />

Ako smo se uverili da je C moguće postići, da vidimo sada kako je to moguće uraditi. Nije<br />

teško zaključiti da nema mnogo smisla vraćati se, već se do rešenja može doći jednosmernim<br />

tokom vode: <strong>iz</strong> česme u krčag zapremine B, <strong>iz</strong> ovoga krčaga u krčag zapremine A, a <strong>iz</strong> ovog<br />

krčaga u baštu. Procedura napuni zasnovana je na ovoj ideji:<br />

(define (napuni X Y A B C) ; X i Y - početne kolicine vode,<br />

; A i B - zapremine krcaga,<br />

; C - tražena kolicina<br />

(cond ((= X C) ‘((Tacna kolicina u prvom krcagu)))<br />

((= Y C) ‘((Tacna kolicina u drugom krcagu)))<br />

((= X A) (cons ‘(Prospi <strong>iz</strong> prvog krcaga)<br />

(napuni 0 Y A B C)))<br />

((= Y 0) (cons ‘(Napuni drugi krcag)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!