Courses/CS 460/Fall 2005/Homework/Xuong Tsan/Dec 3
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] Tutorial, Testing, and Debugging
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}
Amount
in
Amount=Jug.size
NJug = {MakeJug Jug.id Jug.size Amount}
{Browse 'Fill'#NJug}
end
proc{EmptyJug Jug ?NJug}
NJug = {MakeJug Jug.id Jug.size 0}
{Browse 'Empty'#NJug}
end
proc{PourJug Jug1 Jug2 ?NJug2}
if Jug2.amount == 0 then
if Jug1.amount > Jug2.size then
NJug2 = {MakeJug Jug2.id Jug2.size Jug2.size}
else
NJug2 = {MakeJug Jug2.id Jug2.size Jug1.amount}
end
% 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 from '#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 Nlop Opt ExitL
in
%Make sure Source > Sink
if Jug1 < Jug2 then
J2 = {MakeJug 1 Jug1 0}
J1 = {MakeJug 2 Jug2 0}
else
J1 = {MakeJug 1 Jug1 0}
J2 = {MakeJug 2 Jug2 0}
end
ExitL=0
%Find the Number of loop
Lop = (J1.size * J2.size) div Measure
{For 0 Lop 1 proc{$ I}
% if ExitL == 1 then ExitL=1
% else
if Measure == (I*J2.size mod J1.size) then
Mn = I*J2.size
Nlop = I
Opt = 1
% ExitL=1
{Browse Mn}
elseif Measure == (((J1.size * J2.size) - (I*J2.size)) mod J1.size) then
Mn = ((J1.size * J2.size) - (I*J2.size))
Nlop = I
% {Browse Mn}
% {Browse Nlop}
Opt = 2
% ExitL=1
else
% Nlop = I
%Opt = 0
{Browse 'Keep Looking for subset of mutually prime'}
% Opt = 0
end
end
% end
}
{Browse J1#J2}
Ans = {MakeResult J1 J2 Mn Nlop Opt}
end
fun {MakeResult J1 J2 Mn Nlop Opt}
Jug1 Jug2 Jug3 Jug4 Jug5 Jug6 Remain Remain2 InCap PourIn
in
if Nlop > 0 then
if Opt == 1 then
Jug2={FillJug J2}
Jug1={PourJug Jug2 J1}
InCap = J1.size - J1.amount
if InCap > J2.amount then
Jug3={EmptyJug J2}
else
% {Browse 'hi'}
Remain = J2.amount -InCap
Jug3={MakeJug J2.id J2.size Remain}
{Browse 'Remain of J2 '#Jug3}
end
{MakeResult Jug1 Jug3 Mn Nlop-1 Opt}
else
Jug1={FillJug J1}
% {Browse 'this'#Jug1}
Jug2={PourJug Jug1 J2}
% {Browse 'that'#Jug2}
% PourIn = Jug1.amount - Jug2.amount
InCap = J2.size - Jug2.amount
Remain= Jug1.amount - Jug2.amount
% {Browse PourIn}
if Remain == 0 then
Jug3={EmptyJug Jug1}
else
Jug3={MakeJug Jug1.id Jug1.size Remain}
{Browse 'Remain of J1'#Jug3#' and '#Jug2}
end
if {IsFilled Jug2} then
Jug4 = {EmptyJug Jug2}
Jug5 = {PourJug Jug3 Jug4}
Remain2 = Jug3.amount - Jug4.amount
if Remain2 == 0 then
Jug5={EmptyJug Jug1}
else
Jug6={MakeJug Jug1.id Jug1.size Remain2}
{Browse 'Remain of J1'#Jug5#' and '#Jug6}
{MakeResult Jug5 Jug6 Mn Nlop-1 Opt}
end
else
{MakeResult Jug1 Jug3 Mn Nlop-1 Opt}
end
end
else
Opt=Opt
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

