PROGRAM pisteparit_n ! Lasketaan odotusarvo n-ulotteisesta yksikkökuutiosta ! satunnaisesti valittujen pisteiden etäisyydelle. IMPLICIT NONE INTEGER, PARAMETER :: reaali = SELECTED_REAL_KIND(12) REAL (KIND=reaali), DIMENSION(:,:), ALLOCATABLE :: a, b REAL (KIND=reaali) :: t = 0.0, keskiarvo INTEGER :: m, n, allocstat WRITE (*,*) 'Anna dimensio ja pisteparien lkm:' READ (*,*) m, n WRITE (*,*) 'Dimensio:', m, ' pistepareja:', n IF (m > 0 .AND. n > 0) THEN ALLOCATE(a(m,n), b(m,n), STAT=allocstat) IF (allocstat > 0) CALL varausvirhe CALL RANDOM_NUMBER(a) CALL RANDOM_NUMBER(b) t = SUM(SQRT(SUM((a-b)**2, DIM=1))) keskiarvo = t/n WRITE (*,*) 'Etäisyyden keskiarvo:', keskiarvo ELSE WRITE (*,*) 'Lukumäärä tai dimensio negatiivinen!' END IF CONTAINS SUBROUTINE varausvirhe WRITE (*,*) 'Muistin varaus epäonnistui, paluukoodi:', & allocstat STOP END SUBROUTINE varausvirhe END PROGRAM pisteparit_n