'+---------------------------------------------------+
'|  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









