! PROGRAM P68 ! IMPLICIT NONE INTEGER :: J REAL :: X,Y ! INTERFACE FUNCTION GAUSS(X,U,SD) IMPLICIT NONE REAL, INTENT(IN) :: X,U,SD REAL :: GAUSS END FUNCTION GAUSS END INTERFACE ! PRINT *, 'This is Program >> P68 - GAUSS Function' ! ! Example of using a function ! on the RHS of an assignment statement ! X = 0.0 L1: DO J =1,11 ! 11 steps in the positive X direction Y=5.0*GAUSS(X,0.0,1.0)+2.5 ! ! The Gaussian or Normal curve has ! been scaled and translated ! PRINT *,X,Y X = X + 0.5 ! Increase X by a step of .5 END DO L1 STOP END PROGRAM P68 ! ! Example of writing a function ! FUNCTION GAUSS(X,U,SD) IMPLICIT NONE REAL, INTENT(IN) :: X,U,SD REAL :: C,GAUSS C=1.0/(SD*SQRT(2.0*3.14159)) GAUSS=C*EXP(-(X-U)**2/(2.0*SD**2)) RETURN END FUNCTION GAUSSOUTPUT:
+--------------------------------------------------+ | 32-bit Power for Lahey Computer Systems | | Phar Lap's 386|DOS-Extender(tm) Version 7.0 | | Copyright (C) 1986-94 Phar Lap Software, Inc. | | Available Memory = 14880 Kb | +--------------------------------------------------+ This is Program >> P68 - GAUSS Function 0.000000 4.49471 0.500000 4.26033 1.00000 3.70985 1.50000 3.14759 2.00000 2.76995 2.50000 2.58764 3.00000 2.52216 3.50000 2.50436 4.00000 2.50067 4.50000 2.50008 5.00000 2.50001
PROGRAM p68 (input, output); VAR y : REAL; FUNCTION gauss ( x, u, sd : REAL ) : REAL; VAR c : REAL; BEGIN c := 1.0 / ( sd * sqrt ( 2.0 * 3.14159 ) ); gauss := c * exp ( -sqr ( x - u ) / ( 2.0 * sqr ( sd ) ) ) END; BEGIN y := 5.0 * gauss ( 2.5, 0.0, 1.0 ) + 9.5; writeln ( y ) END.
Last modified: 22/07/97