| (!*******************************************************
  * Mosel Example Problems                              *
  * ======================                              *
  *                                                     *
  * file lcdiv.mos                                      *
  * ```````'``````                                      *
  * Example for the use of the Mosel language           *
  * (Largest common divisor of two numbers)             *
  *                                                     *
  * (c) 2008 Fair Isaac Corporation                     *
  *     author: S. Heipcke, 2001                        *
  *******************************************************!)
model Lcdiv                    ! Start a new model
function lcdiv(A,B:integer):integer
 if(A=B) then
  returned:=A
 elif(A>B) then
  returned:=lcdiv(B,A-B)
 else
  returned:=lcdiv(A,B-A)
 end-if   
end-function
declarations
 A,B: integer                  ! Two integer numbers
end-declarations
 write("Enter two integer numbers:\n  A: ")
 fflush
 readln(A)
 write("  B: ")
 fflush
 readln(B)
 writeln("Largest common divisor: ", lcdiv(A,B))
(!
 Instead of using a recursive function call, it is also possible to 
 formulate this program as a while loop:
  
 while (A <> B) do
  if (A>B) then 
   A:=A-B 
  else B:=B-A 
  end-if
 end-do
 
 writeln("Largest common divisor: ", A) 
!)
end-model
 |