LoginSignup
3
1

More than 5 years have passed since last update.

Fortran で「千反田える」

Last updated at Posted at 2014-05-21

Fortran でもえるたそ~ わたし気になります!

実行は Intel visual fortran 2015beta にて。あんま実行結果チェックしてませんw 
chitanda.png
追記:脊髄反射で書いたので、英語がなまって G と Z の発音がどっちも「じー」になっちゃったよ草不可避
追記:修正しました。ついでにコメント付けてみました。

和数字に直す関数は万の桁までしか対応していません。

    module m_jp
      implicit none
      character(len=8), parameter :: alpha(26) = ['えー','びー','しー','でー','いー',&
       'えふ','じー','えっち','あい','じぇー','けー','える','えむ','えぬ','おー','ぴー',&
       'きゅー','あーる','えす','てー','ゆー','ぶい','だぶりゅ','えっくす','わい','ずぃー']
      character(len=2), parameter :: jnum1(0:9) = ['','一','二','三','四', &
                                                 '五','六','七','八','九']
      character(len=2), parameter :: jnum2(4)   = ['万','千','百','十']
    contains
      function jnumber(m)  
        integer, intent(in) :: m
        character(len = :), allocatable :: jnumber ! f2003 可変長文字列 
        character(len = 5) :: tmp
        integer :: i, k(5)
        write(tmp, '(i5.0)') m  ! internal file 5桁の整数値を文字列に 
        read(tmp, '(5i1.0)') k  ! 文字列を1桁づつの整数に変換
        jnumber = ''
        do i = 1, 4
          select case(k(i))
            case(0)
              cycle
            case(1)  
              jnumber = jnumber // jnum2(i)                  ! 一千 等の一を避ける。
            case(2:9) 
              jnumber = jnumber // jnum1(k(i)) // jnum2(i)   ! 万、千、百、十の位
            case default
              stop 'unexpected input: jnumber'
          end select   
        end do
        jnumber = jnumber // trim(jnum1(k(5)))     ! 一の位 一を出力する。空白カット。
      end function jnumber  
    end module m_jp  

    program chitanda
      use m_jp
      implicit none
      integer :: i
      do i = 1, 1000
        print *, jnumber(i), '反田', alpha(mod(i - 1, 26) + 1)  
      end do
    end program chitanda
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1