[COLOR=#a020f0]program[/color] lookup
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] nmax
[COLOR=#2e8b57][b]parameter[/b][/color](nmax [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]12[/color])
[COLOR=#2e8b57][b]integer[/b][/color] factorial_array(nmax), factorial, fac_res
[COLOR=#2e8b57][b]common[/b][/color] [COLOR=#804040][b]/[/b][/color]globals[COLOR=#804040][b]/[/b][/color]factorial_array
[COLOR=#2e8b57][b]integer[/b][/color] j
[COLOR=#804040][b]do[/b][/color] j[COLOR=#804040][b]=-[/b][/color][COLOR=#ff00ff]3[/color],[COLOR=#ff00ff]15[/color]
fac_res [COLOR=#804040][b]=[/b][/color] factorial(j)
[COLOR=#804040][b]if[/b][/color] (fac_res [COLOR=#804040][b]>[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]"factorial("[/color], j, [COLOR=#ff00ff]") = "[/color], fac_res
[COLOR=#804040][b]else[/b][/color] [COLOR=#804040][b]if[/b][/color] (fac_res [COLOR=#804040][b].eq.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]"factorial("[/color], j, [COLOR=#ff00ff]") is undefined for this value !"[/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]"factorial("[/color], j, [COLOR=#ff00ff]") is out of lookup table range !"[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#a020f0]end program[/color] lookup
[COLOR=#a020f0]block data[/color] init_factorial_array
[COLOR=#2e8b57][b]integer[/b][/color] nmax
[COLOR=#2e8b57][b]parameter[/b][/color](nmax [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]12[/color])
[COLOR=#2e8b57][b]integer[/b][/color] factorial_array(nmax)
[COLOR=#2e8b57][b]common[/b][/color] [COLOR=#804040][b]/[/b][/color]globals[COLOR=#804040][b]/[/b][/color]factorial_array
[COLOR=#2e8b57][b]data[/b][/color] factorial_array[COLOR=#804040][b]/[/b][/color][COLOR=#ff00ff]1[/color],[COLOR=#ff00ff]2[/color],[COLOR=#ff00ff]6[/color],[COLOR=#ff00ff]24[/color],[COLOR=#ff00ff]120[/color],[COLOR=#ff00ff]720[/color],[COLOR=#ff00ff]5040[/color],[COLOR=#ff00ff]40320[/color],[COLOR=#804040][b]&[/b][/color]
[COLOR=#ff00ff]362880[/color],[COLOR=#ff00ff]3628800[/color],[COLOR=#ff00ff]39916800[/color],[COLOR=#ff00ff]479001600[/color][COLOR=#804040][b]/[/b][/color]
[COLOR=#a020f0]end[/color] [COLOR=#a020f0]block data[/color] init_factorial_array
[COLOR=#2e8b57][b]integer[/b][/color] [COLOR=#a020f0]function[/color] factorial(n)
[COLOR=#0000ff]! lookup table wrapper function[/color]
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] nmax
[COLOR=#2e8b57][b]parameter[/b][/color](nmax [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]12[/color])
[COLOR=#2e8b57][b]integer[/b][/color] factorial_array(nmax)
[COLOR=#2e8b57][b]common[/b][/color] [COLOR=#804040][b]/[/b][/color]globals[COLOR=#804040][b]/[/b][/color]factorial_array
[COLOR=#2e8b57][b]integer[/b][/color] n, res
[COLOR=#804040][b]if[/b][/color] (n [COLOR=#804040][b]<[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! Error undefined for this value[/color]
factorial [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]else[/b][/color] [COLOR=#804040][b]if[/b][/color] (n [COLOR=#804040][b]>[/b][/color] nmax) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! Error out of lookup table range[/color]
factorial [COLOR=#804040][b]=[/b][/color] [COLOR=#804040][b]-[/b][/color][COLOR=#ff00ff]100[/color]
[COLOR=#804040][b]else[/b][/color] [COLOR=#804040][b]if[/b][/color] (n [COLOR=#804040][b].eq.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#0000ff]! factorial(0) = 1 [/color]
factorial [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]else[/b][/color]
factorial [COLOR=#804040][b]=[/b][/color] factorial_array(n)
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end function[/color] factorial