! 例題 9-8 成績リストの並べ替え(リスト構造) [ポインタの活用 ] PROGRAM ex9_8 IMPLICIT NONE INTEGER :: tensu CHARACTER ( LEN = 12 ) :: namae TYPE unit CHARACTER ( LEN = 12 ) :: name INTEGER :: mark TYPE ( unit ), POINTER :: next ! 自分と同じ型の成分をもつ END TYPE TYPE ( unit ), POINTER :: ent, new, p ALLOCATE ( ent ) NULLIFY( ent%next ) ! 最初はNULLにしておく DO PRINT *, 'Input name (or [Enter] only to stop): ' READ ( *,'( A )' ) namae IF ( namae == ' ' ) EXIT PRINT *, 'Input her or his mark: ' READ *, tensu CALL rearrange END DO ! 出力 p => ent%next DO WHILE ( ASSOCIATED ( p ) ) ! NULL となるまで続ける PRINT '( A12, I4 )', p%name, p%mark p => p%next END DO CONTAINS SUBROUTINE rearrange IMPLICIT NONE ALLOCATE ( new ) p => ent DO WHILE ( ASSOCIATED ( p%next ) ) ! (1)(5) IF ( tensu > p%next%mark ) EXIT ! (4) p => p%next END DO new = unit( namae, tensu, p%next ) ! (2)(6) p%next => new ! (3)(7) END SUBROUTINE rearrange