54 lines
1.4 KiB
Plaintext
54 lines
1.4 KiB
Plaintext
MODULE EvenOdd;
|
|
IMPORT StdLog,Args,Strings;
|
|
|
|
PROCEDURE BitwiseOdd(i: INTEGER): BOOLEAN;
|
|
BEGIN
|
|
RETURN 0 IN BITS(i)
|
|
END BitwiseOdd;
|
|
|
|
PROCEDURE Odd(i: INTEGER): BOOLEAN;
|
|
BEGIN
|
|
RETURN (i MOD 2) # 0
|
|
END Odd;
|
|
|
|
PROCEDURE CongruenceOdd(i: INTEGER): BOOLEAN;
|
|
BEGIN
|
|
RETURN ((i -1) MOD 2) = 0
|
|
END CongruenceOdd;
|
|
|
|
PROCEDURE Do*;
|
|
VAR
|
|
p: Args.Params;
|
|
i,done,x: INTEGER;
|
|
BEGIN
|
|
Args.Get(p);
|
|
StdLog.String("Builtin function: ");StdLog.Ln;i := 0;
|
|
WHILE i < p.argc DO
|
|
Strings.StringToInt(p.args[i],x,done);
|
|
StdLog.String(p.args[i] + " is:> ");
|
|
IF ODD(x) THEN StdLog.String("odd") ELSE StdLog.String("even") END;
|
|
StdLog.Ln;INC(i)
|
|
END;
|
|
StdLog.String("Bitwise: ");StdLog.Ln;i:= 0;
|
|
WHILE i < p.argc DO
|
|
Strings.StringToInt(p.args[i],x,done);
|
|
StdLog.String(p.args[i] + " is:> ");
|
|
IF BitwiseOdd(x) THEN StdLog.String("odd") ELSE StdLog.String("even") END;
|
|
StdLog.Ln;INC(i)
|
|
END;
|
|
StdLog.String("Module: ");StdLog.Ln;i := 0;
|
|
WHILE i < p.argc DO
|
|
Strings.StringToInt(p.args[i],x,done);
|
|
StdLog.String(p.args[i] + " is:> ");
|
|
IF Odd(x) THEN StdLog.String("odd") ELSE StdLog.String("even") END;
|
|
StdLog.Ln;INC(i)
|
|
END;
|
|
StdLog.String("Congruences: ");StdLog.Ln;i := 0;
|
|
WHILE i < p.argc DO
|
|
Strings.StringToInt(p.args[i],x,done);
|
|
StdLog.String(p.args[i] + " is:> ");
|
|
IF CongruenceOdd(x) THEN StdLog.String("odd") ELSE StdLog.String("even") END;
|
|
StdLog.Ln;INC(i)
|
|
END;
|
|
END Do;
|