'+---------------------------------------------------+ '| G R E E D Y -- Demonstrates | '| Fibonacci's Greedy Reciprocal Algorithm | '+---------------------------------------------------+ locate 5,1 print "Demonstrating the Greedy Reciprocal Algorithm" do gosub [ClrLine3] input "Enter fraction's numerator = "; numer if abs(int(numer)) > 99999999 then numer = 0 end if if numer <> abs(int(numer)) then numer = 0 end if loop until numer <> 0 locate 1,6 : print using ("########", numer) do gosub [ClrLine3] input "Enter fraction's denominator = "; denom if abs(int(denom)) > 99999999 then denom = 0 if denom < numer then denom = 0 if denom <> abs(int(denom)) then denom = 0 loop until denom <> 0 gosub [ClrLine3] cls locate 5,1 print "Demonstrating the Greedy Reciprocal Algorithm" locate 11,3 print "fraction = ";numer; print " / ";denom; first = denom : second = numer locate 1,5 result = numer / denom lessnumer = 0 select case case result > 3/4 print using ("##################",3);" / ";4 lessnumer = 3 : lessdenom = 4 case result > 2/3 print using ("##################",2);" / ";3 lessnumer = 2 : lessdenom = 3 case result > 1/2 print using ("##################",1);" / ";2 lessnumer = 1 : lessdenom = 2 end select origdenom = denom print " "; if lessnumer > 0 then print "+ "; numer = numer * lessdenom - denom * lessnumer denom = denom * lessdenom else print " "; end if brake = 0 do quotient = int(denom/numer) if numer * quotient = denom then lessnumer = 1 lessdenom = quotient brake = 1 else lessnumer = 1 lessdenom = int(quotient + 1) end if print lessnumer;" / ";lessdenom numer = numer * lessdenom - denom * lessnumer denom = denom * lessdenom if lessdenom > origdenom then brake = 1 if numer > 0 then print " + ..."; print " significance exceeded" else print " FINISHED" end if else print " + "; end if loop until brake = 1 stop '+----------------------------------------+ '| | '| L O C A L S U B R O U T I N E S | '| ================================= | '| | '+----------------------------------------+ '| [ClrLine3] | '| | '| Clear line 3 | '+----------------------------------------+ [ClrLine3] locate 1,3 : print space$(100) print " (1-8 digits + Enter)" locate 1,3 return