Courses/CS 460/Fall 2005/Homework/Xuong Tsan/Nov 19
From CSWiki
< Courses | CS 460 | Fall 2005 | Homework | Xuong Tsan
Contents |
[edit] Homework Page
Homework page is: | http://cs.calstatela.edu/~wiki/index.php/Courses/CS_460/Fall_2005/Homework/Xuong_Tsan
[edit] Jug Puzzles
local
proc{MakeJug Id Size Amount ?Jug}
% Amount =< 0 = true
% Size >= Amount = true
Jug = {MakeRecord jug [id size amount]}
Jug.id = Id
Jug.size = Size
Jug.amount = Amount
end
proc{FillJug Jug ?NJug}
NJug = {MakeJug Jug.id Jug.size Jug.size}
{Browse 'Fill'#Jug}
end
proc{EmptyJug Jug ?NJug}
NJug = {MakeJug Jug.id Jug.size 0}
{Browse 'Empty'#Jug}
end
proc{PourJug Jug1 Jug2 ?NJug2}
if Jug2.amount == 0 then
NJug2 = {MakeJug Jug2.id Jug2.size Jug1.amount}
% NJug1 = {EmptyJug Jug1}
else
local Cap Remain Fill in
Cap = Jug2.size - Jug2.amount
% Remain = Jug1.amount - Cap
Fill = Jug2.amount + Cap
NJug2 = {MakeJug Jug2.id Jug2.size Fill}
% {Browse Remain}
% {Browse Cap}
% {MakeJug Jug1.id Jug1.size Remain}
end
end
% {EmptyJug Jug1}
{Browse 'Pour for '#Jug1#' to '#Jug2}
end
proc {IsFilled Jug ?Ans}
if Jug.size == Jug.amount then Ans = true
else
Ans = false
end
end
proc{JugPluz Jug1 Jug2 Measure ?Ans}
J1 J2 Lop Mn
in
J1 = {MakeJug 1 Jug1 0}
J2 = {MakeJug 2 Jug2 0}
Lop = (J1.size * J2.size) div Measure
{For 0 Lop 1 proc{$ I}
if Measure == (I*J2.size mod J1.size) then
Mn = I*J2.size
{Browse Mn}
elseif Measure == (((J1.size * J2.size) - (I*J2.size)) mod J1.size) then
Mn = (((J1.size * J2.size) - (I*J2.size)) mod J1.size)
{Browse Mn}
else
{Browse 'Not Answer'}
end
end
}
end
in
%{Browse 1}
%{Browse {EmptyJug {FillJug {MakeJug 1 3 0}}}}
%{Browse '***********'}
%{Browse {PourJug {MakeJug 1 5 3} {MakeJug 2 5 2}}}
{Browse {JugPluz 9 5 8}}
end
[edit] Reading, Designing,and Debugging
local
proc {Partition Src Sink Amount ?Yes}
if Src==0 then {Browse 'Jug1 cannot be 0'}
elseif Sink==0 then {Browse 'Jug2 cannot be 0'}
elseif Src < Sink then {Browse 'Jug2 have to less than Jug1'}
elseif Src < Amount then {Browse 'Amount have to be less than Jug1 and greater then Jug2'}
else {Loop Src Amount}
%first start with
% 0*Sink (mod Src)
% 1*Sink (mod Src)
% 2*Sink (mod Src)
% 3*Sink (mod Src)
% This mean the remainder of Src will equal to Amount
%%Then
% (Src*Sink - 3*Sink) (mod Src)
% (Src*Sink - 2*Sink) (mod Src)
% (Src*Sink - 1*Sink) (mod Src)
end
%find the number of times the funciton have to stop
fun {Loop Src Amount}
}
end

