! 例題 7-5 文字使用頻度と平均単語長 [文字関数 ] PROGRAM ex7_5 IMPLICIT NONE INTEGER :: freq( 1 : 27 ) = 0, code( 1 : 255 ) = 0, i, p, & q( 1 : 1 ), total REAL :: av_len CHARACTER :: moji( 1 : 27 ) * 2, line * 80, abc * 53 = & ' ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' LOGICAL :: mask( 1 : 27 ) DO p = 2, 27 ! 作業用コード表を作成 code( ICHAR( abc( p : p ) ) ) = p code( ICHAR( abc( p + 26 : p + 26 ) ) ) = p moji( p ) = abc( p : p ) // abc( p + 26 : p + 26 ) END DO code( ICHAR( ' ' ) ) = 1 moji( 1 ) = 'SP' PRINT *, 'Input sentences. Return less than 80 characters, or' PRINT *, 'at the END of each sentence. Input EMPTY to stop.' DO READ '( A )', line IF ( line == "" ) EXIT DO i = 1, LEN_TRIM( line ) p = code( ICHAR( line( i : i ) ) ) IF ( p /= 0 ) freq( p ) = freq( p ) + 1 END DO freq( 1 ) = freq( 1 ) + 1 ! 文末ではSPを1個数えておく END DO total = SUM( freq( 2 : 27 ) ) av_len = REAL( total ) / REAL( freq( 1 ) ) mask = ( freq > 0 ) DO IF ( COUNT( mask ) == 0 ) EXIT q = MAXLOC( freq, mask ) PRINT '( 5X, A2, A3, I5 )', moji( q ), ' = ', freq( q ) mask( q ) = .FALSE. END DO PRINT '( " Total = ", I5, " Length =", F4.1 )', total, av_len END PROGRAM ex7_5