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
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
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í.
Offline