MODULE jarjestys IMPLICIT NONE PRIVATE PUBLIC :: lajittele INTERFACE lajittele MODULE PROCEDURE lajittele_r MODULE PROCEDURE lajittele_i MODULE PROCEDURE lajittele_c END INTERFACE CONTAINS SUBROUTINE lajittele_r(taulu) IMPLICIT NONE REAL, DIMENSION(:), INTENT(INOUT) :: taulu REAL :: apu INTEGER :: i, j, n n = SIZE(taulu) DO i = 2, n apu = taulu(i) DO j = i, 2, -1 IF (taulu(j-1) <= apu) EXIT taulu(j) = taulu(j-1) END DO taulu(j) = apu END DO END SUBROUTINE lajittele_r SUBROUTINE lajittele_i(taulu) IMPLICIT NONE INTEGER, DIMENSION(:), INTENT(INOUT) :: taulu INTEGER :: apu INTEGER :: i, j, n n = SIZE(taulu) DO i = 2, n apu = taulu(i) DO j = i, 2, -1 IF (taulu(j-1) <= apu) EXIT taulu(j) = taulu(j-1) END DO taulu(j) = apu END DO END SUBROUTINE lajittele_i SUBROUTINE lajittele_c(taulu) IMPLICIT NONE CHARACTER(LEN=*), DIMENSION(:), INTENT(INOUT) :: taulu CHARACTER(LEN=LEN(taulu(1))) :: apu INTEGER :: i, j, n n = SIZE(taulu) DO i = 2, n apu = taulu(i) DO j = i, 2, -1 IF (taulu(j-1) <= apu) EXIT taulu(j) = taulu(j-1) END DO taulu(j) = apu END DO END SUBROUTINE lajittele_c END MODULE jarjestys PROGRAM lajittelu_testi USE jarjestys, ONLY : lajittele IMPLICIT NONE REAL, DIMENSION(:), ALLOCATABLE :: dr INTEGER, DIMENSION(:), ALLOCATABLE :: di CHARACTER(LEN=8), DIMENSION(:), ALLOCATABLE :: dc INTEGER :: n, i WRITE (*,'(A)',ADVANCE='NO') 'Anna n>1: ' READ (*,*) n IF (n <= 1) THEN STOP 'n <= 1' ELSE ALLOCATE(dr(n), di(n), dc(n)) CALL RANDOM_NUMBER(dr) di = 1e6*dr dc = 'teksti-' dc(:)(8:8) = CHAR(IACHAR(' ') + & MOD(di,1+IACHAR('z')-IACHAR(' '))) WRITE (*,'(A,/,6(F9.5))') 'Data:', dr CALL lajittele(dr) WRITE (*,'(A,/,6(F9.5))') 'Lajiteltu data:', dr WRITE (*,'(A,/,6(I9))') 'Data:', di CALL lajittele(di) WRITE (*,'(A,/,6(I9))') 'Lajiteltu data:', di WRITE (*,'(A,/,6(A9))') 'Data:', dc CALL lajittele(dc) WRITE (*,'(A,/,6(A9))') 'Lajiteltu data:', dc END IF END PROGRAM lajittelu_testi