PROGRAM keskiarvo_testi IMPLICIT NONE REAL, DIMENSION(6) :: a a = (/ 1.0, -1.0, 0.5, 1.5, 2.5, 5.0 /) write (*,'(A,6(F7.3))') 'a: ', a WRITE (*,'(A,F7.3)') 'keskiarvo: ', keskiarvo(a) WRITE (*,'(A,F7.3)') 'keskiarvo: ', keskiarvo(a,0.0) WRITE (*,'(A,F7.3)') 'keskiarvo: ', & keskiarvo(ylaraja=3.0,alaraja=-2.0,x=a) WRITE (*,'(A,F7.3)') 'keskiarvo: ', keskiarvo(a,1.0,0.0) CONTAINS REAL FUNCTION keskiarvo(x, alaraja, ylaraja) IMPLICIT NONE REAL, DIMENSION(:), INTENT(IN) :: x REAL, INTENT(IN), OPTIONAL :: alaraja, ylaraja REAL :: a, b INTEGER :: i, lkm a = -HUGE(a) b = HUGE(b) IF (PRESENT(alaraja)) a = alaraja IF (PRESENT(ylaraja)) b = ylaraja keskiarvo = 0 lkm = 0 DO i = 1, SIZE(x) IF (x(i) >= a .AND. x(i) <= b) THEN keskiarvo = keskiarvo + x(i) lkm = lkm + 1 END IF END DO IF (lkm /= 0) THEN keskiarvo = keskiarvo/lkm ELSE keskiarvo = -HUGE(keskiarvo) END IF END FUNCTION keskiarvo END PROGRAM keskiarvo_testi