Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 17. 04. 2011 20:02

nordec
Příspěvky: 122
Reputace:   
 

Prolog

Ahoj, asi je to hloupý dotaz, ale už si s tím lámu hlavu delší dobu. Napsal jsem program, který pro dvě nádoby zjistí, zda lze přeléváním dosáhnout objemu X. Jenže Prolog odpoví kladně, i když je X větší, než obě nádoby.

Program:
prel(A,B,X):- prel(A,S,B,T,X). % pro dvě nádoby o objemu A a B, aktuálním objemu S a T a cílovém stavu X
:- S is 0, T is 0, I is 0. % začínáme s prázdnými nádobami, I označuje iteraci posloupnosti stavů
prel(A,S,B,T,S). % v první nádobě máme cílový stav
prel(A,S,B,T,T). % ve druhé nádobě máme cílový stav

% přeléváme vždy z první nádoby do druhé:
prel(A,S,B,T,X):- S == 0, S is A. % je-li první nádoba prázdná, naplníme ji
prel(A,S,B,T,X):- B == T, T is 0. % je-li druhá nádoba plná, vyprázdníme ji
prel(A,S,B,T,X):- S == A, T == 0, I is I+1. % projdeme-li podruhé počátečním stavem, posloupnost stavů se bude opakovat (druhá iterace)
prel(A,S,B,T,X):- I =< 1, S =< B-T, T is T+S, S is 0. % z první nádoby lze přelít vše do druhé,
prel(A,S,B,T,X):- I =< 1, S > B-T, S is S-B+T, T is B. % nebo přelijeme co se vejde


V čem je chyba?

Offline

 

#2 01. 05. 2011 19:11

Wotton
Logik
Místo: Plzeň
Příspěvky: 826
Reputace:   25 
 

Re: Prolog

No chybu tam nevidím, ale to moc v Prologu neznamená (opravdu ho nemám rád:-), a navíc jsem ho dělal naposled před asi 7mi lety). Jinak pokud se dobře pamatuju, tak prolog by měl mít tracing. Tak ho sem kdyžtak zkus hodit pro to špatný zadání.


Dva jsou tisíckrát jeden.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson