36 lines
464 B
Plaintext
36 lines
464 B
Plaintext
CARD FUNC Factorial(INT n BYTE POINTER err)
|
|
CARD i,res
|
|
|
|
IF n<0 THEN
|
|
err^=1 RETURN (0)
|
|
ELSEIF n>8 THEN
|
|
err^=2 RETURN (0)
|
|
FI
|
|
|
|
res=1
|
|
FOR i=2 TO n
|
|
DO
|
|
res=res*i
|
|
OD
|
|
|
|
err^=0
|
|
RETURN (res)
|
|
|
|
PROC Main()
|
|
INT i,f
|
|
BYTE err
|
|
|
|
FOR i=-2 TO 10
|
|
DO
|
|
f=Factorial(i,@err)
|
|
|
|
IF err=0 THEN
|
|
PrintF("%I!=%U%E",i,f)
|
|
ELSEIF err=1 THEN
|
|
PrintF("%I is negative value%E",i)
|
|
ELSE
|
|
PrintF("%I! is to big%E",i)
|
|
FI
|
|
OD
|
|
RETURN
|