!----- Ex9_4: 成績リスト ----- PROGRAM usage_of_pointer TYPE unit CHARACTER(LEN=12) :: name INTEGER :: mark TYPE(unit), POINTER :: next END TYPE ! CHARACTER(LEN=12) :: namae INTEGER :: tensu TYPE(unit), POINTER :: ent, new, p ALLOCATE(ent); NULLIFY(ent%next) DO PRINT*, "Input name (or [ENTER]-key to stop):" READ(*,'(A)') namae; IF( namae ==' ') EXIT PRINT*, "Input her or his mark:" READ*, tensu CALL rearange END DO ! !----- 出力 p => ent%next DO WHILE( ASSOCIATED(p) ) PRINT "(A12, I4)", p%name, p%mark p => p%next END DO ! CONTAINS SUBROUTINE rearange ALLOCATE(new) p => ent DO WHILE( ASSOCIATED(p%next)) IF( tensu > p%next%mark ) EXIT p => p%next END DO new = unit(namae, tensu, p%next) p%next => new END SUBROUTINE END