-- Code of Figure 1.8, page 26 from -- Kenneth C. Louden, Programming Languages -- Principles and Practice 2nd Edition -- Copyright (C) Brooks-Cole/ITP, 2003 -- Note: I have also added (but not used) -- the code from Figures 1.1 (p. 11) -- and 1.2 (p. 12) with Text_IO; use Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; procedure gcd_prog is function gcd (u, v: in integer) return integer is begin if v = 0 then return u; else return gcd(v, u mod v); end if; end gcd; -- code from Figure 1.1, p. 11 procedure gcd (u, v: in integer; x: out integer) is y, t, z: integer; begin z := u; y := v; loop exit when y = 0; t := y; y := z mod y; z := t; end loop; x := z; end gcd; -- code from Figure 1.2, p. 12 (renamed to avoid name clash) function gcd2 (u, v: in integer) return integer is y, t, z: integer; begin z := u; y := v; loop exit when y = 0; t := y; y := z mod y; z := t; end loop; return z; end gcd2; x: Integer; y: Integer; begin put_line("Input two integers:"); get(x); get(y); put("The gcd of "); put(x); put(" and "); put(y); put(" is "); put(gcd(x,y)); new_line; end gcd_prog;