Posted at

ズンドコキヨシ with Fortran

More than 3 years have passed since last update.


背景

ズンドコキヨシまとめによりますと、ズンドコブームなのでFORTRANで書いてみました。

元ネタが「自作関数を作り記述しなさい」とのことですが、戻り値は要らないのでFUNCTIONではなくSUBROUTINEで実装しました。

FORTRAN77で書き始めたのですが、乱数生成でちょっと困ったのでFORTRAN90の組み込み関数を拝借しました。たぶん動的配列もFORTRAN90以降のコンパイラでしか動きません。我々のようないまどきの若者はピュアなFORTRAN77コンパイラなど使うことはないから問題ないのです。gfortran 4.8.3で確認しました。


コード


zundoko.f

      SUBROUTINE ZUNDKO()

INTEGER CNTZUN,TIME,SEEDSZ
INTEGER,ALLOCATABLE::SEED(:)
REAL RND
CALL RANDOM_SEED(SIZE=SEEDSZ)
ALLOCATE(SEED(SEEDSZ))
CNTZUN=0
DO
CALL SYSTEM_CLOCK(COUNT=TIME)
DO I=1,SEEDSZ
SEED(I)=SEED(I)+TIME
END DO
CALL RANDOM_SEED(PUT=SEED)
CALL RANDOM_NUMBER(RND)
IF (RND .LT. 0.5) THEN
PRINT *,"ズン"
CNTZUN=CNTZUN+1
ELSE
PRINT *,"ドコ"
IF (CNTZUN .GE. 4) THEN
PRINT *,"キ・ヨ・シ!"
RETURN
END IF
CNTZUN=0
END IF
END DO
END SUBROUTINE

PROGRAM MAIN
CALL ZUNDKO()
END PROGRAM



実行例

$ gfortran -o zundoko zundoko.f ; ./zundoko 

ズン
ドコ
ドコ
ドコ
ズン
ドコ
ドコ
ズン
ズン
ズン
ズン
ズン
ドコ
キ・ヨ・シ!