oberonbyexample/recursion/Gcd.Mod
2017-06-10 18:45:59 +04:00

31 lines
604 B
Modula-2

MODULE gcd;
IMPORT Out, Modules;
VAR
gcd : INTEGER;
arg0, arg1 : LONGINT;
PROCEDURE getGCD(a, b : INTEGER): INTEGER;
VAR ret : INTEGER;
BEGIN
IF a = 0 THEN ret := b;
ELSIF b = 0 THEN ret := a;
ELSIF b > a THEN ret := getGCD(b, a);
ELSE ret := getGCD(b, a MOD b) END;
RETURN ret;
END getGCD;
BEGIN
IF Modules.ArgCount # 3 THEN
Out.String("enter two integers to get GCD"); Out.Ln;
HALT(1)
END;
Modules.GetIntArg(1, arg0); Modules.GetIntArg(2, arg1);
gcd := getGCD(SHORT(arg0), SHORT(arg1));
Out.Int(gcd, 0); Out.Ln;
END gcd.